gcc错误:未定义对的引用***
在我的main.c文件中,我将gcc错误:未定义对的引用***,c,gcc,C,Gcc,在我的main.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 请给我建议一条出路。提前
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
请给我建议一条出路。提前感谢。当您使用时,define
是为前置处理器定义一个宏。此宏仅在定义它的源文件中可见。没有其他源文件会看到此宏定义,并且预处理器将无法在其他源文件中为您展开宏,因此编译器会看到符号编号
,并且没有任何此类符号的声明
要解决此问题,您有两个选择:
NUMBER
定义为适当的变量而不是宏,然后在另一个源文件中使用extern
声明#时,定义数字“0”
并编写外部整数代码>之后,编译器将其转换为extern int“0”编译之前,这是毫无意义和错误的
如果要定义常数并从其他位置访问它,可以编写:
const int NUMBER = '0';
及
由于您的编号
属于int
类型,因此可以将其声明为枚举常量:
enum { NUMBER = '0' };
您必须将其放在头文件(.h)中,并将该头文件包含在编译单元(.c文件)中。很好地解释了为什么它不起作用。对如何修复有何评论?
enum { NUMBER = '0' };