带有C语言范围的变量,不带静态关键字

时间:2015-10-08 11:35:03

标签: c mingw codeblocks

在下面的代码中,我从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;
}

1 个答案:

答案 0 :(得分:2)

默认情况下,没有静态的全局变量具有全局范围。在这里您定义了相同的变量(没有初始化)。一个被认为是定义,另一个被编译器声明。

如果在定义本身中使用两个不同的值初始化变量。它会导致链接器错误。