【发布时间】:2015-09-30 11:10:20
【问题描述】:
您好,我有以下 2 个文件
在a.c我有
#include <stdio.h>
int i;
static int j;
int main()
{
printf("i = %d\n",i);
printf("j = %d\n",j);
return 0;
}
在b.c 我有
#include <stdio.h>
extern int i=2;
extern int j=5;
在此示例中,当我运行时,我得到的答案为 2,0,但编译器对两个变量都抛出警告 initialized and declared ‘extern’。
由于j 的范围仅适用于a.c,b.c 如何能够访问j 而不会引发错误?
【问题讨论】:
-
请参阅other answers 这个问题。警告本身与
a.c无关。即使你自己编译b.c,你也会得到同样的警告。 -
为什么说“j 的范围仅适用于 a.c”?它在
b.c中声明为extern。 -
由于
j在a.c中被声明为静态,我认为范围仅限于该文件。 -
@arya 是的。这就是为什么你的主要打印
0为j而不是5。不清楚你真正要问的是什么。 -
好吧,让我这样说,当我在
b.c中声明static int j=0并在a.c中声明extern并在 @ 的main函数中打印j的值987654345@ 然后我得到链接器错误为undefined reference toj'`。那么反之亦然也应该这样做。对吧?