相关疑难解决方法(0)

在C中,如何将全局变量的范围限制为声明它的文件?

我是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"并正常终止.我非常想使用文件范围.我错过了什么?

c scope

7
推荐指数
2
解决办法
7807
查看次数

从一个文件访问静态变量到另一个文件

我最近遇到的问题是如何访问一个在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

如果我在上面,我可以访问变量.

所以我的问题是:

  1. 上述程序是否违反静态变量规则?

  2. 如果没有,为什么会这样,除了包括file(#include <…>)之外,还有其他方法可以访问静态变量.

    我怎么能从另一个文件访问静态变量?

    在C中,如何将全局变量的范围限制为声明它的文件?

  3. 如果我对静态变量概念有误,并且有更好的解决方案可用于访问静态变量,请纠正我?

c static static-variables internal-link

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×2

internal-link ×1

scope ×1

static ×1

static-variables ×1