gcc错误:未定义引用***

时间:2014-10-06 13:55:12

标签: c gcc

在我的主.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

请建议我一个出路。提前谢谢。

3 个答案:

答案 0 :(得分:9)

使用#define时,会为预处理器定义一个宏。此宏仅在您定义的源文件中可见。没有其他源文件将看到此宏定义,并且预处理器将无法在其他源文件中为您扩展宏,因此编译器会看到符号NUMBER并且它没有任何此类符号的声明。

要解决此问题,您有两种选择:

  1. 将宏放在两个源文件中包含的头文件中。
  2. 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文件)中包含该标头。