Code 1
#include <stdio.h>
int T;
int main()
{
struct T{ double x;};
printf("%d", sizeof(T));
return 0;
}
输出:4
Code 2
#include <stdio.h>
struct T{ double x;};
int main()
{
int T;
printf("%d", sizeof(T));
return 0;
}
输出:4
对于code 1
,我认为输出是全局变量(int T
)的大小,这就是它给出4的原因。
但是对于code 2
,它给出了输出4,根据全局变量逻辑,它应该为struct T{ double x;};
输出8。
在这里,全局变量概念不正确 - 我认为。
任何人都可以解释为什么输出看起来像?
答案 0 :(得分:2)
这里的问题不是范围,而是结构标签如何与其他符号一起存在于不同的名称空间中。
因此,当您执行sizeof(T)
时,总是获取变量T
。
要在C中获取结构标记,您需要struct
关键字。与sizeof(struct T)
中一样。
如果您使用typedef
:
struct T
{
double x;
} T;
然后你会在“普通”命名空间中有一个名为T
的类型。另一方面,该类型将与具有相同名称的变量冲突,因此您将收到编译器错误。