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。
在这里,全局变量概念不正确 - 我认为。
任何人都可以解释一下为什么输出看起来像?
这里的问题不是范围,而是与其他符号不同的名称空间中的结构标签。
因为这样做sizeof(T)
时,您始终获取变量T
。
要在C中获得一个结构标签,您需要struct
关键字。如sizeof(struct T)
。
如果您使用typedef
:
struct T
{
double x;
} T;
然后,您将在"正常"名称空间中拥有一个名为T
的类型。另一方面,该类型将与变量相同的名称冲突,因此您将获得编译器错误。