在KEILC编程中,编译器的编译过程是把C编译成汇编,而再由汇编转化为机器码。在汇编
代码阶段,函数的命名是有规则的,就是函数名一律变大写,然后通过特定名字组合变为
一固定标号:
例如 lcd.c文件中的lcdstring()函数,在编译为汇编后标号变为?PR?LCDSTRING?LCD
PR代表这个是函数,然后问号分隔,函数名,再到所在C文件。
这样就引发一个问题,大小写是没区别的,也就是说,如果我们在lcd.c文件中有两个函
数:lcdstring()和LcdString(),那么编译后两个的标号都变为?PR?LCDSTRING?LCD,是会编
译不通过的,虽然标准C中是大小敏感,但在KEILC中,同一个C文件内的函数是大小写不敏
感的。
同上,对于同一类型的全局变量,也有上面的问题。
无聊中提出这个问题,不知道大家是否有留意过?我用KEILC都好久了,还是昨天才发现这
个问题的:)
相关帖子>>>:
如果大小写不区分的话,我用p1时会错误,用P1就可以通过了。我也不知道这时什么问题啊。(0字)hchaochuan[7次]2004-11-12 15:40:14
它会自动命名的。就像flashget下载,重名了它自动加个(1)一样(0字)变成浪子[8次]2004-11-12 9:51:32
我试了,不会的,只会报错。你的KEILC什么版本?(0字)电子白菜[10次]2004-11-12 10:34:18
刚试下!的确会报错(336字)51新手[16次]2004-11-12 10:38:53
*** FATAL ERROR L256: MODULE CONTAINS DUPLICATE SEGMENT NAMES
SEGMENT: ?PR?START?0928
MODULE: 0928.obj (0928)
只要同名子程序存在,不调用也会报错,不是警告(0字)51新手[6次]2004-11-12 10:41:58
你怎么拭的?(0字)变成浪子[6次]2004-11-12 10:39:18
不会KC不支持大小写吧?(0字)变成浪子[7次]2004-11-12 10:43:46
lx51.chm - Fatal Error L256(1134字)cnpollux[19次]2004-11-12 10:48:41
Fatal Error L256 (MODULE CONTAINS DUPLICATE SEGMENT NAMES)
Summary *** Fatal Error L256
MODULE CONTAINS DUPLICATE SEGMENT NAMES
SEGMENT: segment-name
MODULE: filename (modulename)
Description A module contains duplicate segment names. This occurs when the C
source contains two identical function names, that differ only in
lower/uppercase letters.
Copyright (c) Keil Software, Inc. and and Keil Elektronik GmbH. All rights reserved.
以后起不同的名字就可以了.什么东西都不可能没有漏洞吧.(0字)星期天[6次]2004-11-12 10:41:23
找到问题症结:KC不区分大小写。同样的程序,偶在iccavr能通过。(0字)变成浪子[8次]2004-11-12 10:46:50
其实这个是编译过程中的漏洞,我也是昨天在看.M51文件的时候发现的。(108字)电子白菜[16次]2004-11-12 11:03:17
主要是因为它的命名方式引起的,在同一个.C文件中的确不区分大小写。但我想以后的新
版本也许会修正这个BUG。
阅读(6454) | 评论(0) | 转发(0) |