显示内部与外部链接的示例

Example of showing internal vs external linkage

我尝试设置以下内容以显示具有全局范围的变量与具有 file/program 范围的变量之间的区别:

// scope.c
#include<stdio.h>

int main(void)
{
    printf("External: %d\n", external);
    printf("Internal (static): %d\n", internal); // should error
}
// scope_other.c
int external = 7;   // file scope, external linkage
static int internal = 6;   // file scope, internal linkage

并编译:

$ gcc scope.c scope_other.c -o scope && ./scope

但似乎我在这里遗漏了一些正确演示全局与静态链接的内容。证明这一点的正确方法是什么?

您需要在 scope.c 中声明两个变量。

尝试在 scope.c 中的 main 定义之前添加 extern int external, internal;。这将修复您无疑会看到的两个变量的 compiler 错误。但是您仍然会收到 linker 错误,仅 internal。如果注释掉打印 internal 的行,但保留打印 external 的行,程序将编译,link 和 运行.