繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM