小编hel*_*ore的帖子

不同的静态全局变量共享相同的内存地址

摘要

我有几个C源文件,它们都声明了个别名称相同的静态全局变量.我的理解是每个文件中的静态全局变量应该只在该文件中可见,并且不应该应用外部链接,但实际上我可以在调试时看到同名的变量共享相同的内存地址.

就像static关键字被忽略一样,全局变量被视为extern相反.为什么是这样?

示例代码

foo.c的:

/* Private variables -----------------------------------*/
static myEnumType myVar = VALUE_A;

/* Exported functions ----------------------------------*/
void someFooFunc(void) {
    myVar = VALUE_B;
}
Run Code Online (Sandbox Code Playgroud)

bar.c:

/* Private variables -----------------------------------*/
static myEnumType myVar = VALUE_A;

/* Exported functions ----------------------------------*/
void someBarFunc(void) {
    myVar = VALUE_C;
}
Run Code Online (Sandbox Code Playgroud)

baz.c:

/* Private variables -----------------------------------*/
static myEnumType myVar = VALUE_A;

/* Exported functions ----------------------------------*/
void someBazFunc(void) {
    myVar = VALUE_D;
}
Run Code Online (Sandbox Code Playgroud)

调试观察

  1. myVar = ...在每个函数内的行上设置断点.
  2. 从main 调用someFooFunc, …

c gcc arm gnu-arm

26
推荐指数
1
解决办法
1324
查看次数

标签 统计

arm ×1

c ×1

gcc ×1

gnu-arm ×1