![](/img/trans.png)
[英]In C, if objects declared at block scope have no linkage, why does function declaration inside main() without “extern” work?
[英]Does extern declaration on static function break internal linkage?
我有一个理论上的问题。
这是一个例子:
文件1.c
static void foo()
{
...
}
文件2.c
extern void foo();
main()
{
foo();
}
编译正常。
那么,外部中断了静态声明的内部链接吗?
“编译还可以”仅是理论上的,还是您实际进行过测试?
从其所在的编译单元(通常为C文件)外部不应看到static
函数。
在不同的编译单元中使用extern
声明相同名称的函数不应对此进行更改。
确保您确实正确构建并链接了测试程序,因为否则,您要测试的全部就是可以对外部符号(从2.c引用的foo
函数)进行“悬挂”引用。 将2.c编译为可执行文件(即链接它)应该会失败。
编译应该可以。 如果还可以链接该链接,则说明编译器存在问题。
快速测试确认预期的链接器故障(VC ++ 2010 Express):
1> test.obj:错误LNK2019:函数_wmain中引用的未解析的外部符号“ void __cdecl foo(void)”(?foo @@ YAXXZ)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.