在我的主.c文件中,我将NUMBER
定义为:
#define NUMBER '0'
在另一个.c文件2中,我已将其声明为“extern int”变量并使用它。但是在编译gcc时会出现以下错误消息:
/tmp/ccsIkxdR.o: In function `file2':
file2.c:(.text+0xfd): undefined reference to `NUMBER'
collect2: error: ld returned 1 exit status
请建议我一个出路。提前谢谢。
答案 0 :(得分:9)
使用#define
时,会为预处理器定义一个宏。此宏仅在您定义的源文件中可见。没有其他源文件将看到此宏定义,并且预处理器将无法在其他源文件中为您扩展宏,因此编译器会看到符号NUMBER
并且它没有任何此类符号的声明。
要解决此问题,您有两种选择:
NUMBER
定义为适当的变量而不是宏,然后在另一个源文件中声明extern
。答案 1 :(得分:4)
当您在C文件中#define
某事(即创建预处理器宏)时,它可以作为文本替换,它不变量的声明。因此,当您编写#define NUMBER '0'
并稍后编写extern int NUMBER;
时,编译器会在编译之前将其转换为extern int '0';
,这是毫无意义和错误的。
如果要定义常量并从其他地方访问它,可以写:
const int NUMBER = '0';
和
extern int NUMBER;
答案 2 :(得分:0)
由于NUMBER
的类型为int
,因此您可以将其声明为枚举常量:
enum { NUMBER = '0' };
您必须将其放在头文件(.h)中并在编译单元(.c文件)中包含该标头。