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



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

我使用C51-keil编译器来构建代码,链接器给出以下错误:

"外部属性与公共属性不匹配">

函数和变量不能使用相同的名称吗?不同的情况?

该特定编译器适用于嵌入式系统(使用8051芯片(,并真正针对这些环境。我在这个领域见过编译器甚至不支持浮点,Keil明确表示,虽然它是基于C90的,但与该标准存在偏差。

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

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

因此,就链接器而言,可以肯定的是,setlocal变量和SetLocal函数之间存在冲突,两者都被视为SETLOCAL

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

最新更新