[英]Problems compiling program with extern variable
当我创建一个像这样的单独的块(一对新的花括号)时,在main()函数中:
int main(void){
int x = 10;
{
extern int y;
printf("\tNo. is %d\n", y);
int y = 20;
}
}
当我编译这段代码时,我遇到一个错误:
test.c: In function ‘main’:
test.c:12:9: error: declaration of ‘y’ with no linkage follows extern declaration
int y = 20;
test.c:9:16: note: previous declaration of ‘y’ was here
extern int y;
但
如果将int的定义放在主函数的末尾,则代码将编译并完全正常运行。
错误背后的原因可能是什么? 根据我的书,如果将变量声明为extern,则可以在定义变量之前使用它,编译器将在整个文件中搜索变量的定义。
您不能在具有相同块作用域的块中两次声明相同名称的变量。
C区分文件作用域中的变量(=在任何函数之外)和局部作用域中的变量。
用extern
声明并在printf
使用的y
变量是指文件范围内的变量。 该变量仅声明,并且必须在其他位置“定义”。 那就是必须为其分配存储空间。
如果您在任何{}
都包含y
的第二个声明,则这是一个与文件作用域变量不同的局部变量。 如果在外部,则它是文件作用域变量的声明和该文件作用域变量的“临时定义”。 因此,在此后一种情况下,您将看到一个声明,该声明在使用该变量的位置可见,而在其他位置则提供一个定义,例如提供存储,一切正常。
是的,在那里使用extern时出现问题。 这意味着此int y是在同一文件或不同文件中全局定义的。 但没有定义y(全局),您正在打印该外部值,这就是其链接器错误的原因
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.