C 为什么在结构上运行sizeof必须有括号

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可以完美地处理简单的变量类型,比如不带括号的

因此,我试图在我的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可以完美地处理简单的变量类型,比如不带括号的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 )

编译错误到底是什么?