为什么编译器将字符视为整数?

时间:2012-07-26 15:21:11

标签: c integer

我有一小段代码。 当我在我的DevC ++ gnu编译器上运行它时,它显示以下输出:

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

输出:4,1

为什么'a'被视为整数,而b被视为只是一个字符常量?

4 个答案:

答案 0 :(得分:9)

因为字符文字在C中的类型为int而不是char

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

请注意,在C ++中,字符文字的类型为char,因此sizeof 'a' == sizeof (char)

答案 1 :(得分:0)

这就是它在C中的方式。这就是语言最初定义的方式。至于为什么...当时几乎C中的所有东西都是int,除非有一个很好的理由让它成为别的东西。因此,历史上C中的字符常量具有类型int

注意BTW,在C命名法'a'中称为常量,而不是 literal 。 C有字符串文字,没有其他文字。

答案 2 :(得分:0)

在C中,字符文字的类型为int。

在C ++中,只包含一个字符的字符文字具有char类型,这是一个整数类型。

在C和C ++中,宽字符文字的类型为wchar_t,多字符文字的类型为int。

答案 3 :(得分:0)

来自IBM XL C / C ++文档

  

字符文字包含一系列字符或转义符   用单引号符号括起来的序列,例如'c'。   例如,字符文字可以以字母L为前缀   L'C”。没有L前缀的字符文字是普通的   字符文字或狭义字符文字。字符文字   L前缀是一个宽字符文字。一个普通人物   包含多个字符或转义序列的文字   (不包括单引号('),反斜杠()或换行符)   是一个多字符文字。

     

字符文字具有以下形式:

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

角色中必须至少出现一个字符或转义序列   文字。字符可以来自源程序字符集,   不包括单引号,反斜杠和换行符号。一个   字符文字必须出现在单个逻辑源行上。

     

C字符文字的类型为int