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

标签 c static extern

我有一个理论问题。

这是一个例子:

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/

相关文章:

c++ - C/C++ : is it faster to assign a 0 to an unsigned long variable or to xor the variable with itself?

c - GCC 编译器中的优化对溢出条件有什么影响

如果对象是静态的,C++ 会计算每次调用的 sizeof

c - 如何在多个模块中使用全局数组

c++ - 为什么 cout 不打印 extern "C"变量?

c - 在 Visual Studio 中使用 threadprivate 指令

iOS:使用 C/C++ 将文件写入 Documents 文件夹,并使用 Files/iTunes 或第三方工具轻松检索它

c - 如何从 C 运行外部程序并解析其输出?

c++ - 从派生类访问静态常量变量

css - S3 CSS 资源未加载,但之前已加载。为什么会停下来呢?