c - C 中的全局静态变量和局部静态变量如何不会发生冲突

标签 c

我在程序中定义了一个全局静态变量“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/

相关文章:

c - fgets "Access violation writing location 0xCCCCCCCC."错误

c - MALLOC_CHECK 是否多线程?

c++ - 如何使用 GCC 编译指示启用选项 '-Werror'?

c - 为什么使用字符指针的大小

c - "-1>>5;"是 C 中的未指定行为吗?

ios - 为什么在编码 URL 时格式化 NSPredicate 会导致 swift 崩溃?

将 double 与 C 中的文字值进行比较会在 32 位机器上给出不同的结果

c - ANSI C 链表。 Add() 函数的行为很有趣

c - 我如何才能不卡住单击后处理信息的 GTK 按钮?

c - 选择排序——稳定