混淆C中变量的范围 code 1 #包括 int T; int main() { 结构T{double x;}; printf(“%d”,sizeof(T)); 返回0; }

混淆C中变量的范围 code 1 #包括 int T; int main() { 结构T{double x;}; printf(“%d”,sizeof(T)); 返回0; },c,struct,scope,global-variables,sizeof,C,Struct,Scope,Global Variables,Sizeof,产出:4 代码2 #包括 结构T{double x;}; int main() { int T; printf(“%d”,sizeof(T)); 返回0; } 产出:4 对于code 1,我认为输出是全局变量(int T)的大小,这就是它给出4的原因 但是对于code 2,它给出了输出4,根据全局变量逻辑,struct{double x;}的输出应该是8 在这里,我认为全局变量的概念是不正确的 有人能解释一下为什么输出看起来像这样吗?这里的问题不是范围,而是结构标记如何位于与其他符号不同的名称

产出:4

代码2
#包括
结构T{double x;};
int main()
{
int T;
printf(“%d”,sizeof(T));
返回0;
}
产出:4

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

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

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


有人能解释一下为什么输出看起来像这样吗?

这里的问题不是范围,而是结构标记如何位于与其他符号不同的名称空间中

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

要获得C中的结构标记,需要
struct
关键字。如
sizeof(struct T)
所示


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

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

然后在“normal”名称空间中有一个名为
T
的类型。另一方面,该类型会与同名的变量冲突,因此会出现编译器错误。

这里的问题不是范围,而是结构标记如何与其他符号位于不同的命名空间中

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

要获得C中的结构标记,需要
struct
关键字。如
sizeof(struct T)
所示


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

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

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

对于
T
的typedef,不会出现编译器错误。这两个名称将在不同(嵌套)范围内;内部名称将是
printf()
语句中使用的名称(使用
sizeof
运算符)。如果使用
T
的typedef,则不会出现编译器错误。这两个名称将在不同(嵌套)范围内;内部名称将是
printf()
语句中使用的名称(使用
sizeof
运算符)。
struct T
{
    double x;
} T;