C 外部未定义引用

c extern undefined reference

我很抱歉我确定这是一个简单的错误。但是几个小时后,我无法弄清楚我做错了什么。我知道 extern 需要在函数外声明并在函数内定义。但是我无法让它工作。

这是我的最小代码错误。

extern double d;
int main(void) {
    d = 0;
    return 0;
}
/home/0KzRYK/ccCTD3Lf.o: In function `main':
prog.c:(.text.startup+0x3): undefined reference to `d'
collect2: error: ld returned 1 exit status

你的理解有误。具有 extern 的变量不需要在函数中定义。但它必须在某处定义(可能是另一个源文件)。

示例:

main.c:

extern double d;
int main(void) {
    d = 0;
    return 0;
}

d.c:

double d;

编译:

gcc -o main main.c d.c

谢谢大家的评论。我的错误是假设 extern double d 以与 double d 相同的方式定义变量。但显然不是。

我会说这是一种 non-intuitive 属性 的语言,至少对于初学者来说是这样(例如 extern double 不是定义,但 static double 是).

根据你的评论,我发现了一个相关的问题,正是在讨论这个问题:Why is creating a variable using 'extern' a declaration and not a definition?