c - 相同的名称,但在 c 中具有不同的 case 变量和函数名称

标签 c microcontroller keil

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

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

“外部属性与公共(public)属性不匹配”

函数和变量不能使用相同的名称吗?用不同的大小写?

最佳答案

那个特定的编译器是为嵌入式系统(使用 8051 芯片)设计的,并且真正针对那些环境。我见过那个领域的编译器甚至不支持 float ,Keil 明确表示,虽然它基于 C90,但有deviations从那个标准。

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

Names may be up to 255 characters long. The C language provides for case sensitivity in regard to function and variable names. However, for compatibility reasons, all names in the object file appear in capital letters. It is therefore irrelevant if an external object name within the source program is written in capital or small letters.

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

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

关于c - 相同的名称,但在 c 中具有不同的 case 变量和函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066925/

相关文章:

c - 定义变量时使用 'extern' 关键字

c - 在 C 中使用 pthread 进行 DNS 查找

c - 基本生成文件程序 : in main Error undefined reference to "power"

gcc - 如何在数据部分(RAM)中保留一定范围的内存并防止使用该内存的同一应用程序的堆/堆栈?

sockets - IP 组播 + UDP : Should I receive data for all groups?

c - trie 中未初始化的值

embedded - Microchip TCP/IP 堆栈能否同时实现两个或多个客户端套接字?

c - 获取仅初始化第一项的数组的内存空间

c - ARM C中main中声明的全局变量和变量的区别

c - 嵌入式 Keil C 是否支持多线程?