文字定数

提供: RAD Studio
移動先: 案内検索

文字定数の概要:インデックス への移動

字定数は、1 つ以上の文字が単一引用符で囲まれたもので、'A''+''\n' などがあります。 C では、1 文字定数のデータ型は int になります。 C++ では、文字定数のデータ型は Char になります。 C も C++ の場合も、複数文字定数のデータ型は int になります。

文字定数についての詳細については、以下のトピックを参照してください: 「3 種類の文字型」、「エスケープシーケンス」「ワイド文字定数と複数文字定数」、「Unicode 文字型とリテラル(C++0x)」。

C および C++ における文字型のサイズ

文字型のサイズを比較するには、以下のソースコードを C プログラムとしてコンパイルした後、C++ プログラムとしてコンパイルします。

#include <stdio.h>
#define CH 'x'       /* A CHARACTER CONSTANT */
void main(void) {
   char ch = 'x';    /* A char VARIABLE      */
   printf("\nSizeof int     = %d", sizeof(int) );
   printf("\nSizeof char    = %d", sizeof(char) );
   printf("\nSizeof ch      = %d", sizeof(ch) );
   printf("\nSizeof CH      = %d", sizeof(CH) );
   printf("\nSizeof wchar_t = %d", sizeof(wchar_t) );
}

メモ: サイズはバイト単位です。

C および C++ における文字型のサイズ:

C プログラムとしてコンパイルした場合の出力 C++ プログラムとしてコンパイルした場合の出力

Sizeof int = 4

Sizeof int = 4

Sizeof char = 1

Sizeof char = 1

Sizeof ch = 1

Sizeof ch = 1

Sizeof CH = 4

Sizeof ch = 1

Sizeof wchar_t = 2

Sizeof wchar_t = 2


C++0x における 4 種類の文字リテラル

デフォルトでは、C++ の文字リテラルは Char データ型の ANSI 文字で構成されます。 C++ および C++0x では、文字リテラルの前に L プレフィックス(接頭辞)を付けることで、その文字リテラルが Wchar t データ型のワイド文字で構成されることを指定できます。 C++0x では、文字リテラルの前に uU 接頭辞を付けることで、その文字リテラルが UTF-16(Char16 t データ型)または UTF-32(Char32 t データ型)エンコーディングの、Unicode 文字で構成されることを指定できます(「Unicode 文字型とリテラル(C++0x)」)。

C++0x プログラムでは、たとえば、以下のような文字リテラルを使用できます。

  • 'A' - これは char データ型の ANSI 文字です。 この文字リテラルには 1 バイトのメモリが割り当てられます。
  • L'A' - これは、wchar_t データ型のワイド文字です。 この文字リテラルには 2 バイトのメモリが割り当てられます。
  • u'A' - これは、UTF-16 でエンコードされた char16_t データ型の Unicode 文字です。 この文字リテラルには、(この文字が基本多言語面に属しているかどうかによって)2 バイトまたは 4 バイトのメモリが割り当てられます。
  • U'A' - これは、UTF-32 でエンコードされた char32_t データ型の Unicode 文字です。 この文字リテラルには 4 バイトのメモリが割り当てられます。

関連項目