静态函数的extern声明是否会破坏内部链接?

时间:2012-01-18 12:35:05

标签: c static extern

我有一个理论问题。

以下是一个例子:

file1.c中

static void foo()
{
    ...
}

file2.c中

extern void foo(); 

main()
{
    foo();
}

编译没问题。

那么,extern打破了静态声明的内部联系?

3 个答案:

答案 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)