【发布时间】:2014-06-28 22:45:16
【问题描述】:
假设我有2个C src文件,A1.C,A2.C,这些是内容:
A1.C
int x;
int main(){
void f(void);
x = 5;
f();
printf("%d", x);
return 0;
}
A2.C
int x;
void f() { x = 4; }
尽管缺少“extern”安全字,链接器并没有给我任何错误。我有 2 个相同的符号。有人能解释一下为什么吗?
【问题讨论】:
-
您是否尝试添加一些警告选项,例如
-W(用于 GCC)等等...? -
我相信如果你没有 extern,编译器会删除其中一个冗余变量
-
@apache 这不太可能。如果它像你说的那样发生,那么
extern密钥将毫无用处。但也许,编译器将这两个变量视为static。更容易知道问题是否包含此类代码产生的输出。 -
@Unda:它们被声明为具有外部链接。不给出存储类说明符表示“外部链接”,
extern表示“已经给出的链接,如果没有给出,则为外部的”。
标签: c linker static-linking extern linkage