我有一个理论问题。
这是一个例子:
file1.c
static void foo()
{
...
}
file2.c
extern void foo();
main()
{
foo();
}
编译成功
所以,extern 打破了静态声明的内部链接?
最佳答案
“编译成功”只是理论上的,还是你实际测试过的?
static
函数不应该从它所在的编译单元(通常是 C 文件)外部可见。
在不同的编译单元中用 extern
声明同名函数不应改变这一点。
确保您确实正确地构建并链接了测试程序,否则您正在测试的所有内容就是您可以拥有对外部符号的“悬挂”引用(foo
函数引用自 2.c)。将 2.c 构建为可执行文件(即链接它)应该会失败。
关于c - 静态函数的外部声明是否会破坏内部链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910180/