混淆C

时间:2017-02-23 04:06:56

标签: c struct scope global-variables sizeof

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。

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

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

1 个答案:

答案 0 :(得分:2)

这里的问题不是范围,而是结构标签如何与其他符号一起存在于不同的名称空间中。

因此,当您执行sizeof(T)时,总是获取变量T

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

如果您使用typedef

,情况会有所不同
struct T
{
    double x;
} T;

然后你会在“普通”命名空间中有一个名为T的类型。另一方面,该类型将与具有相同名称的变量冲突,因此您将收到编译器错误。