C - 使用extern访问全局变量。案例分析

时间:2015-03-29 03:50:54

标签: c global-variables extern

我认为externs是在编译单元之间共享变量。为什么以下代码有效?它是如何工作的?这是好习惯吗?

#include <stdio.h>
int x = 50;

int main(void){ 
    int x = 10; 
    printf("Value of local x is %d\n", x);

    {
        extern int x;
        printf("Value of global x is %d\n", x);
    }

    return 0; 
}

打印出来:

Value of local x is 10
Value of global x is 50 

2 个答案:

答案 0 :(得分:4)

使用extern关键字时,链接器会在对象文件/库/存档中找到具有匹配名称的符号。简单来说,符号是函数和全局变量(局部变量只是堆栈中的一些空间),因此链接器可以在这里做到这一点。

关于它是一种好的做法 - 一般来说,全球变量不被认为是一种好的做法,因为它们会导致意大利面条代码并且污染&#39;符号池。

答案 1 :(得分:0)

answerJonathan Leffler外,请同时查看同一问题on gcc.gnu.org mailing list的答案。

这两个答案都是以相同的精神,使用ISO / IEC 9899的措辞。