2012-09-28 76 views
1

在運行下面的代碼的:默認類型符號,無符號,const和volatile

int main() 
{ 
    int a = sizeof(signed) + sizeof(unsigned); 
    int b = sizeof(const) + sizeof(volatile); 

    printf("%d",a+++b); 

    return 0; 
} 

在Visual C++,我得到作爲16的輸出的signedunsignedconstvolatile缺省數據類型考慮int

+0

你是真的急於寫這個問題嗎? – Shahbaz

+1

含糊不清的補充背後的原因是什麼? – Lundin

回答

4

它不只是這些限定符,C語言的默認類型是int。所以如果你不指定數據類型,編譯器將假定int

例如,如果你不聲明一個函數並使用它,編譯器會給你一個警告,並假定該函數返回int。

+1

不,C至少自C99沒有像默認類型 –

4

第一:sizeof不是一個函數,它是一個運算符。如果它是一個函數,你將如何實現它?你不能,這是關鍵。

是的,這些限定符的默認類型是int

+1

不,C至少自C99沒有像默認類型。 –

1

你的程序是不是標準的C:

int a = sizeof(signed) + sizeof(unsigned); 

是,OK,signedint實際上同義詞的是unsignedunsigned int

int b = sizeof(const) + sizeof(volatile); 

這些都不是在C.不允許歷史上可能有過一段時間,這些地方解釋爲int,太多,但你不應該依賴於這一點,你的編譯器應該哭泣。

printf("%d",a+++b); 

我甚至拒絕看這應該如何解析,結果應該是什麼,因爲這與問題無關。

+0

我同意這種觀點,但我確定你確實知道它是如何解析的,結果應該如何。 –