2015-10-08 14 views
2

在下面的代码中,我从file2.c中var10的变量声明中删除了词extern我期待在两个文件中的变量var10是相互独立的,并且都有文件范围当extern不在其中一个文件中使用时。但结果是10和34,而不是我所期望的10和10。所以我们不能使用文件作用域而不使用静态关键字?为什么在两个变量的作用域相同的情况下我们不会得到多重定义错误?我用codeblcoks + MinGW的变量与C中的文件范围没有静态关键字

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

'定义'vs'声明' –

回答

1

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

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

+1

这不是关于范围,而是关系。两者都是可以定义的定义_。使用初始化程序会初步定义一个正常的定义,如果有两个具有相同名称的正常定义的文件,则会出现错误。 (注意:初始化程序的不同与否无关)。 – Olaf

+0

@Olaf你是对的! – sreeyesh