我发现在使用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
这种形式编译时,不会产生多重定义链接错误。
无论全局变量是否初始化,人们都会期望多重定义链接错误会发生。那么这是否意味着编译器默认将未初始化的全局变量设置为外部变量?