相同的名称,但在c中具有不同的大小写变量和函数名称

时间:2013-02-25 12:24:13

标签: c microcontroller keil

我有一个名为setlocal的变量和一个名为void SetLocal(void)的函数

我正在使用C51 keil编译器来构建代码,链接器会出现以下错误:

“外部属性与公众不匹配”

是不是可以为函数和变量使用相同的名称?不同的情况?

1 个答案:

答案 0 :(得分:3)

该特定编译器适用于嵌入式系统(使用8051芯片),并且真正针对这些环境。我见过那个甚至不支持浮点数的竞技场中的编译器,Keil明确表示,虽然它是基于在C90上,但该标准中有deviations

根据Keil website上列出的编译器限制:

  

名称最长可达255个字符。 C语言提供了关于函数和变量名称的区分大小写。但是,出于兼容性原因,目标文件中的所有名称都以大写字母显示。因此,如果源程序中的外部对象名称是以大写字母或小写字母书写,则无关紧要。

所以可以肯定的是,就链接器而言,setlocal变量和SetLocal函数之间存在冲突,这两者都会被视为{{1} }。

这也解释了(如您的评论中所述)为什么将变量名称更改为SETLOCAL可以解决您的问题。虽然这些符号不区分大小写,但它们 对于255个字符是唯一的。