我有一个名为setlocal的变量和一个名为void SetLocal(void)的函数
我正在使用C51 keil编译器来构建代码,链接器会出现以下错误:
“外部属性与公众不匹配”
是不是可以为函数和变量使用相同的名称?不同的情况?
答案 0 :(得分:3)
该特定编译器适用于嵌入式系统(使用8051芯片),并且真正针对这些环境。我见过那个甚至不支持浮点数的竞技场中的编译器,Keil明确表示,虽然它是基于的在C90上,但该标准中有deviations。
根据Keil website上列出的编译器限制:
名称最长可达255个字符。 C语言提供了关于函数和变量名称的区分大小写。但是,出于兼容性原因,目标文件中的所有名称都以大写字母显示。因此,如果源程序中的外部对象名称是以大写字母或小写字母书写,则无关紧要。
所以可以肯定的是,就链接器而言,setlocal
变量和SetLocal
函数之间存在冲突,这两者都会被视为{{1} }。
这也解释了(如您的评论中所述)为什么将变量名称更改为SETLOCAL
可以解决您的问题。虽然这些符号不区分大小写,但它们 对于255个字符是唯一的。