对C中变量的范围感到困惑

Confusing about the scope of the variables in C

Code 1
#include <stdio.h>
int T;
int main()
{
   struct T{ double x;};
   printf("%d", sizeof(T));
   return 0;
}

Output: 4

Code 2
#include <stdio.h>
struct T{ double x;};
int main()
{
   int T;
   printf("%d", sizeof(T));
   return 0;
}

Output: 4

对于 code 1,我认为输出是全局变量的大小 (int T),这就是为什么它给出 4.

但是对于code 2,它给出输出4,根据全局变量逻辑,对于struct T{ double x;};应该输出8。

这里,全局变量概念不正确-我认为。

任何人都可以解释为什么输出看起来像这样吗?

这里的问题不是作用域,而是结构标记如何与其他符号存在于不同的 命名空间 中。

因此,当您执行 sizeof(T) 时,您 总是 得到变量 T.

要在 C 中获取结构标记,您需要 struct 关键字。如 sizeof(struct T).


如果你使用 typedef 情况会有所不同:

struct T
{
    double x;
} T;

那么您将在 "normal" 命名空间中拥有一个名为 T 的类型。另一方面,该类型会与具有相同名称的变量冲突,因此您会收到编译器错误。