2012-07-26 38 views
4

我有一小段代碼。 當我在我的DEVC++ GNU編譯器運行此它顯示下面的輸出:爲什麼編譯器將字符視爲整數?

main() 
{  char b = 'a'; 
     printf ("%d,", sizeof ('a')); 
     printf ("%d", sizeof (b)); 
     getch(); 
} 

OUTPUT:4,1

爲什麼'a'當作整數,而作爲b作爲處理只有一個字符常量?

回答

9

由於字符文字是int類型的,並且在C.

char

所以sizeof 'a' == sizeof (int)

請注意,在C++中,字符文字類型爲char,因此sizeof 'a' == sizeof (char)

+0

我試圖找到這個標準。你知道它在哪裏嗎? – chris 2012-07-26 15:24:59

+2

@chris(C99,6.4 .4.4p10)「整數字符常量的類型爲int。」 – ouah 2012-07-26 15:25:39

+0

sizeof(int)是4,sizeof(char)是1. – Vernon 2012-07-26 15:31:20

0

這就是它在C中的方式。這就是語言最初的定義。至於爲什麼......那麼幾乎C中的所有東西都是一個int,除非有很好的理由讓它成爲別的東西。因此,歷史上C中的字符常量的類型爲int

注順便說一句,在C命名'a'被稱爲不斷,不文字。 C有字符串文字,沒有其他文字。

0

在C中,字符常量的類型爲int。

在C++中,只包含一個字符的字符常量的類型爲char,它是一個整數類型。

在C和C++中,寬字符文字的類型爲wchar_t,而多字符文字的類型爲int。

0

從IBM XL C/C++文檔

字符常量包含的字符序列或逃生括在單引號符號 序列,例如「C」。 字符文字可能以字母L爲前綴,例如 L'c'。沒有L前綴的字符文字是普通的 字符文字或窄字符文字。具有L前綴的字符文字 是寬字符文字。包含多個字符或轉義序列的普通字符 (不包括單引號('),反斜槓()或換行字符) 是一個多字符文字。

字符文字具有以下形式:

   .---------------------. 
      V      | 
>>-+---+--'----+-character-------+-+--'------------------------>< 
    '-L-'  '-escape_sequence-' 

至少一個字符或轉義序列必須出現在字符 文字。這些字符可以來自源程序字符集 (不包括單引號,反斜槓和換行符號)。 A 字符文字必須出現在單個邏輯源代碼行上。

Ç字符文字的類型爲int

相關問題