全局变量的多个定义

时间:2016-03-16 15:59:59

标签: c gcc global-variables

在使用 gcc 编译C程序时,我偶然发现了这种奇怪的行为。

假设我们有两个简单的源文件:

fun.c

#include <stdio.h>

// int var = 10;   Results in Gcc compiler error if global variable is initialized
int var;

void fun(void) {
    printf("Fun: %d\n", var);
}

的main.c

#include <stdio.h>
int var = 10;
int main(void) {
    fun();
    printf("Main: %d\n", var);
}

令人惊讶的是,当编译为gcc main.c fun.c -o main.out时,这不会产生多重定义链接器错误

无论全局变量初始化如何,都会发生多定义链接器错误发生相同的情况。 这是否意味着编译器默认情况下将未初始化的全局变量设为extern?

1 个答案:

答案 0 :(得分:1)

全局变量可以包含任意数量的声明,但只能包含一个定义。初始化程序使它成为一个定义,因此它会抱怨有两个(即使他们同意)。