我有一个理论问题。
以下是一个例子:
file1.c中
static void foo()
{
...
}
file2.c中
extern void foo();
main()
{
foo();
}
编译没问题。
那么,extern打破了静态声明的内部联系?
答案 0 :(得分:4)
仅在理论上“编译正常”,或者您是否真的对此进行了测试?
从编辑单元外部(通常是C文件)不应该看到static
函数。
在不同的编译单元中用extern
声明同名的函数不应该改变它。
确保您确实正确构建并链接测试程序,否则您正在测试的是,您可以对外部符号({{1})进行“悬空”引用从2.c)引用的函数。将2.c构建为可执行文件(即链接它)应该会失败。
答案 1 :(得分:0)
编译应该没问题。如果你也可以链接它,你的编译器就有问题。
答案 2 :(得分:0)
快速测试确认预期的链接器故障(VC ++ 2010 express):
1> test.obj:错误LNK2019:函数_wmain中引用的未解析的外部符号“void __cdecl foo(void)”(?foo @@ YAXXZ)