2016-09-30 75 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)不是。