【问题标题】:C data segment identificationC数据段识别
【发布时间】:2015-01-30 17:41:44
【问题描述】:

如果我声明

  static int a ;// globally and 
  static int a ; // locally in one function 

所以现在有两个 .. 的实例

我知道所有静态变量都进入数据段,但是它们在数据段中如何区分哪个是本地的,哪个是全局的??

【问题讨论】:

  • 看看地图文件告诉我们..
  • 我不知道你的意思,但是“a”只是你给变量的名字,编译器只知道它的地址。当您引用 global a 时,它有自己的地址,local a 也有自己的地址。

标签: c static data-segment


【解决方案1】:

事实上你可以走得更远:你可以声明

static int a;

在对您的程序有贡献的两个或多个单独文件中的文件范围内。不同范围内的每个此类声明都声明了一个单独的变量。因此,给定

f.c:

static int a;

int f() {
    static int a;
    return 0;
}

ma​​in.c

static int a;

int f(void);

int main() {
    return f();
}

在不同的位置与名称a 相关联的三个单独的静态变量。为每个变量引用安排正确的存储是编译器和链接器的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多