2016-09-30 77 views
2

的操作数的名称当你定义像下面结构为的sizeof

typedef struct num { 
    int a; 
    int b; 
} A; 

然后sizeof(A)有效的结构,但sizeof(num)不是。任何人都可以解释为什么sizeof运营商不接受num

+0

'num'是一个标签,而不是一个类型。所以'sizeof(num)'是无效的,但'sizeof(struct num)'很好。 – Michael

+0

@unwind感谢您的评论!我认为大小是一个函数... – SD11

+0

@unwind在这种情况下,'sizeof A'不起作用。由于'A'是一种类型,'sizeof'需要括号。 –

回答

2

由于num自身不构成在C语言的类型(仅struct num或其的typedef A构成类型)。

sizeof unary-expression 
sizeof (type-name) 

num既不是类型也不是一元表达式:所以,sizeof作为其操作数不是在任一种形式的,它的定义为失败。

因此,sizeof(struct num)sizeof(A)是好的,但sizeof(num)不是。