显示内部与外部链接的示例
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 和 运行.
我尝试设置以下内容以显示具有全局范围的变量与具有 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 和 运行.