0

我已经读过,如果我想在另一个 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 xandint 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说明符在这里是多余的吗?!

4

1 回答 1

0

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

于 2013-09-22T14:07:04.347 回答