我在程序中定义了一个全局静态变量“x”,在同一程序的一个函数中定义了局部静态变量“x”。两者都应该驻留在数据段中。那么为什么编译器没有给出错误或名称是如何解析的。
最佳答案
why the compiler is not giving error
因为这两个变量具有不同的作用域,这意味着从编译器的角度来看它们是两个不同的变量。
how the names are resolved
编译器可能会给它们不同的名字。
例如
static int x;
void foo(void) {
static int x;
}
这是 x
的符号:
$ readelf -s t108.o | grep x
Num: Value Size Type Bind Vis Ndx Name
5: 0000000000000000 4 OBJECT LOCAL DEFAULT 3 x
6: 0000000000000004 4 OBJECT LOCAL DEFAULT 3 x.1707
关于c - C 中的全局静态变量和局部静态变量如何不会发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341294/