【发布时间】:2016-10-06 01:19:32
【问题描述】:
我发现我可以在不使用 extern 的情况下达到预期的结果(尽管我同意它给读者一些关于变量的提示)。在某些情况下,使用 extern 会产生不希望的结果。
xyz.h
int i;
file1.c
#include "xyz.h"
....
i=10;
....
file2.c
#include "xyz.h"
main()
{
printf("i=%d\n",i);
}
当然,这是一个大项目,为了简单理解,把它分解了。使用 extern 关键字,我无法得到想要的结果。事实上,我使用“extern”方法得到了变量 i 的链接器错误。
采用“外部”方法的代码,
file1.c
int i;
main()
{
i=10;
}
file2.c
extern int i;
foo()
{
printf("i=%d\n",i);
}
这导致链接器错误。我只是想知道为什么它在第一种情况下有效,以及在不使用关键字“extern”的情况下我们无法做到这一点的实际情况。谢谢。
【问题讨论】:
-
在第二种情况下,你有两个函数叫做
main。 -
道歉。 file2.c 没有 main()
-
嗯...链接的“重复”如何真的是重复的。 OP 的问题是关于避免
extern,而所谓的重复是关于正确使用extern。 -
@Harsha:我不明白您的第二种方法怎么可能出现链接器错误。修复函数名称后,第二种方法不再有任何链接器问题。从中获取链接器错误的唯一方法是忘记将目标文件之一提供给链接器。