在下面的代码中,我从 file2.c 中 var10 的变量声明中删除了单词 extern 我期望两个文件中的变量 var10 彼此独立,并且当其中一个文件中未使用 extern 时,它们都具有文件范围文件。但结果是 10 和 34,而不是我预期的 10 和 10。所以我们不能在不使用 static 关键字的情况下拥有文件范围的变量?如果两个变量的范围相同,为什么我们不会出现多重定义错误?我用的是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;
}
最佳答案
默认情况下,没有静态的全局变量具有全局作用域。在这里你定义了相同的变量(没有初始化)。一个被视为定义,另一个被编译器视为声明。
如果您在定义本身中使用两个不同的值初始化变量。它将导致链接器错误。
关于c - 没有static关键字的C中具有文件范围的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33014601/