我是C的新手.我面前有一本书,解释了C的"文件范围",包括示例代码.但是代码只声明并初始化一个文件范围的变量 - 它不会通过尝试以非法方式访问它来验证变量的范围.所以!本着科学的精神,我构建了一个实验.
档案bar.c:
static char fileScopedVariable[] = "asdf";
Run Code Online (Sandbox Code Playgroud)
档案foo.c:
#include <stdio.h>
#include "bar.c"
main()
{
printf("%s\n", fileScopedVariable);
}
Run Code Online (Sandbox Code Playgroud)
根据我的书和谷歌,呼叫printf()应该失败 - 但事实并非如此.foo.exe输出字符串"asdf"并正常终止.我非常想使用文件范围.我错过了什么?
我最近遇到的问题是如何访问一个在file1.c中声明为static的变量到另一个file2.c?
是否可以访问静态变量?
我对C中静态关键字的理解是,
static是"内部链接",因此只能从一个编译单元访问它们 - 它们被定义的单元.使用内部链接声明的对象是单个模块的私有对象.
正如我的一位朋友建议我解决方案.
在 file1.c
#include <stdio.h>
int main()
{
int b=foo();
printf("%d",b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 file2.c
static int a=25;
int foo()
{
return a;
}
Run Code Online (Sandbox Code Playgroud)
汇编 gcc file1.c file2.c -o file
如果我在上面,我可以访问变量.
所以我的问题是:
上述程序是否违反静态变量规则?
如果没有,为什么会这样,除了包括file(#include <…>)之外,还有其他方法可以访问静态变量.
如果我对静态变量概念有误,并且有更好的解决方案可用于访问静态变量,请纠正我?