2012-07-25 54 views
21

可能重複:
Size of character ('a') in C/C++爲什麼此程序的輸出在C和C++之間不同?

下面的程序

#include <stdio.h> 

int main() 
{ 
    printf("%d\n", sizeof('\0')); 
    printf("%d\n", sizeof(0)); 
} 

用gcc輸出

4 
4 

和機智編譯h g ++

1 
4 

爲什麼會發生這種情況?我知道這不是編譯器,而是C和C++之間的區別,但是原因是什麼?

+25

更喜歡_language_-dependent! – Shahbaz 2012-07-25 10:18:08

+0

出於好奇,你爲什麼首先要做這件事? – Aerovistae 2012-11-29 18:14:09

回答

35

在C中,字符常量具有類型int按照標準的6.4.4.4(10),

一個整數的字符常數具有int類型。包含映射到單字節執行字符的單個字符的整數字符常量 的值是被解釋爲整數的映射字符的表示形式的 數值。

因此,您打印出的尺寸爲int兩倍。

在C++中,字符常量的類型爲char

12

\0字符文字在C中被視爲int,所以您實際上最終會打印sizeof(int)而不是sizeof(char)

ideone給出了相同的結果(C,C++)。

+1

@Konrad,true,小於int的所有東西在C.中被認爲是int。Fixed。 – 2012-07-25 10:09:28

+0

不,這不是真的,不是* everything *被視爲'int',只有字符文字:http://ideone.com/ZQIPC – 2012-07-25 10:12:19

+0

@Konrad,在您的示例中的'short'測試使用了一個強制轉換。當然,沒有辦法表達'short'字面值,所以即使是'short'中的值也會從開始時被解析爲'int'。事實上,知道一個可能的'short'文字是否會像'char'一樣被對待會很有趣...... – 2012-07-25 10:18:02

4

在C字符文字是整數。在C++中,它們是字符。

0

輸出已經與編譯器相關,因爲您使用了錯誤的格式說明符size_t這將是%zu。在比intsize_t的64位系統上,這會給你帶來任何垃圾。

否則這個舒爾是依賴於編譯器的。您嘗試打印大小的兩個值分別是C中的int和C++中的charint。所以在C中,通常應該給你4 48 8,並且在C++ 1 41 8中。

相關問題