C 为什么在结构上运行sizeof必须有括号
因此,我试图在我的C程序中获得结构的大小,并编写以下代码:C 为什么在结构上运行sizeof必须有括号,c,struct,C,Struct,因此,我试图在我的C程序中获得结构的大小,并编写以下代码: typedef struct Msg_Header Msg_Header; // the struct Msg_Header was defined earlier int size = sizeof Msg_Header; 这产生了一个我无法理解的编译错误。为了使其工作,我发现我必须使用如下括号: int size = sizeof(Msg_Header); 这很奇怪,因为sizeof可以完美地处理简单的变量类型,比如不带括号的
typedef struct Msg_Header Msg_Header; // the struct Msg_Header was defined earlier
int size = sizeof Msg_Header;
这产生了一个我无法理解的编译错误。为了使其工作,我发现我必须使用如下括号:
int size = sizeof(Msg_Header);
这很奇怪,因为sizeof可以完美地处理简单的变量类型,比如不带括号的int,当我使用struct Msg_Header代替别名时,同样的奇怪行为也会发生
有人能解释一下这是怎么回事吗
编辑:
编译错误显示:“Msg_Header之前的预期表达式”只有在表达式的情况下才可以使用
sizeof
运算符,而不是类型本身(也不是由typedef
关键字创建的类型同义词)。有关可能的有效用法,请参见以下示例:
#include <stdio.h>
struct Msg_Header { // struct tag
int n;
};
typedef struct Msg_Header Msg_Header; // typedef synonym
int main(void) {
Msg_Header msg_header;
printf("%zu\n", sizeof(struct Msg_Header));
printf("%zu\n", sizeof(Msg_Header));
printf("%zu\n", sizeof msg_header);
return 0;
}
#包括
struct Msg_头{//struct标记
int n;
};
typedef struct Msg_Header Msg_Header;//typedef同义词
内部主(空){
消息头消息头;
printf(“%zu\n”,sizeof(struct Msg_头));
printf(“%zu\n”,sizeof(Msg_头));
printf(“%zu\n”,消息头的大小);
返回0;
}
此处的生活示例:尽管
sizeof
是一个运算符而不是函数,但与需要括号的类型一起使用时。基本上,您可以将其转换为需要括号的类型转换
从标准6.5.3一元运算符:
unary-expression:
postfix-expression
++ unary-expression
-- unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
编译错误到底是什么?