没有static关键字的C中具有文件范围的变量
variable with file scope in C without static keyword
在下面的代码中,我从 var10 的变量声明中删除了单词 extern file2.c 我期望两个文件中的变量 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;
}
默认情况下,没有静态的全局变量具有全局作用域。在这里你定义了相同的变量(没有初始化)。一个被编译器认为是定义,另一个被认为是声明。
如果您在定义本身中使用两个不同的值初始化变量。它将导致链接器错误。
在下面的代码中,我从 var10 的变量声明中删除了单词 extern file2.c 我期望两个文件中的变量 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;
}
默认情况下,没有静态的全局变量具有全局作用域。在这里你定义了相同的变量(没有初始化)。一个被编译器认为是定义,另一个被认为是声明。
如果您在定义本身中使用两个不同的值初始化变量。它将导致链接器错误。