在下面的代码中,我从file2.c中的var10的变量声明中删除了extern一词。我期望两个文件中的变量var10彼此独立,并且当extern未在其中一个中使用时,它们都具有文件范围文件。但结果是10和34而不是10和10,正如我所期待的那样。所以我们不能使用带有文件范围的变量而不使用静态关键字?为什么在两个变量的范围相同的情况下我们不会得到多个定义错误?我使用codeblcoks + mingw
file1.c中
#include <stdio.h>
int var10;
int main (void)
{
var10=10;
printf("Var10 before function call=%d\n",var10);
var10TestFunc2();
printf("Var10 after function call=%d\n",var10);
}
file2.c中
#include<stdio.h>
int var10;
void var10TestFunc2(void)
{
var10 = 34;
}
答案 0 :(得分:2)
默认情况下,没有静态的全局变量具有全局范围。在这里您定义了相同的变量(没有初始化)。一个被认为是定义,另一个被编译器声明。
如果在定义本身中使用两个不同的值初始化变量。它会导致链接器错误。