2014-11-02 59 views
1

所以我试图让我的C程序结构的大小和写下面的代码:对结构的sizeof为什么RAN必须有括号

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,当我使用结构Msg_Header,而是如果同一怪异的行为accures别名。

有人可以解释这里发生了什么吗?

编辑: 编译错误表示:

+0

什么是编译错误是什么呢? – phantom 2014-11-02 16:31:09

回答

1

“Msg_Header之前预期表述” sizeof操作者可以在没有括号只在表达式的情况下,可以使用,而不是类型(NOR型同义词由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; 
} 

生活样本这里:http://ideone.com/tMB5cY

1

虽然sizeof是运营商,而不是一个功能,你需要在括号型时。基本上你把它交给一个类型的类型,它需要括号。

从标准6.5.3 Unary operators

unary-expression: 
    postfix-expression 
    ++ unary-expression 
    -- unary-expression 
    unary-operator cast-expression 
    sizeof unary-expression 
    sizeof (type-name) 
相关问题