下面的程序
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('\0'));
printf("%d\n", sizeof(0));
}
用gcc輸出
4
4
和機智編譯h g ++
1
4
爲什麼會發生這種情況?我知道這不是編譯器,而是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++之間的區別,但是原因是什麼?
在C中,字符常量具有類型int
按照標準的6.4.4.4(10),
一個整數的字符常數具有int類型。包含映射到單字節執行字符的單個字符的整數字符常量 的值是被解釋爲整數的映射字符的表示形式的 數值。
因此,您打印出的尺寸爲int
兩倍。
在C++中,字符常量的類型爲char
。
@Konrad,true,小於int的所有東西在C.中被認爲是int。Fixed。 – 2012-07-25 10:09:28
不,這不是真的,不是* everything *被視爲'int',只有字符文字:http://ideone.com/ZQIPC – 2012-07-25 10:12:19
@Konrad,在您的示例中的'short'測試使用了一個強制轉換。當然,沒有辦法表達'short'字面值,所以即使是'short'中的值也會從開始時被解析爲'int'。事實上,知道一個可能的'short'文字是否會像'char'一樣被對待會很有趣...... – 2012-07-25 10:18:02
在C字符文字是整數。在C++中,它們是字符。
輸出已經與編譯器相關,因爲您使用了錯誤的格式說明符size_t
這將是%zu
。在比int
寬size_t
的64位系統上,這會給你帶來任何垃圾。
否則這個舒爾是依賴於編譯器的。您嘗試打印大小的兩個值分別是C中的int
和C++中的char
和int
。所以在C中,通常應該給你4 4
或8 8
,並且在C++ 1 4
或1 8
中。
更喜歡_language_-dependent! – Shahbaz 2012-07-25 10:18:08
出於好奇,你爲什麼首先要做這件事? – Aerovistae 2012-11-29 18:14:09