我可以在另一个文件中使用“int”而不是“extern”int吗?

时间:2013-09-22 13:56:49

标签: c

我曾经读过,如果我想在另一个C文件中使用全局变量,我应该在数据类型之前加上访问说明符 extern ,如下所示:

File One                             File Two
int x, y;                            extern int x, y;
char ch;                             extern char ch;
int main(void)                       void func22(void)
{                                     {
/* ... */                              x = y / 10;
}                                     }
void func1(void)                      void func23(void)
{                                     {
x = 123;                               y = 10;
}                                     }

并且在文件二中错误地我没有声明x,y。我将它们声明为int xint y,我等待编译器显示重新定义变量x和y的错误,但代码运行没有任何错误。

例如:

文件一

#include <stdio.h>

int global = 1000;  /** declare global variable called 
                       global **/

int main(){

print();

return 0;
}

文件二

int global;   /** here I don't use the extern keyword **/

void print(void){

global = 100;

printf("\n global = %d",global);

return;

}

结果是:global = 100

编译并链接程序时没有任何错误

所以我的问题是:extern说明符在这里是多余的吗?!

1 个答案:

答案 0 :(得分:0)

您没有收到任何错误,因为编译器不检查类型,也不检查外部变量是否存在。 在链接阶段,链接器在目标文件中搜索对名为x(或y)的符号的引用。