文字定数

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

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

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

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

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++11 における 4 種類の文字リテラル

デフォルトでは、C++ の文字リテラルは char データ型の ANSI 文字で構成されます。 C++ および C++11 では、文字リテラルの前に L プレフィックス(接頭辞)を付けることで、その文字リテラルが wchar_t データ型のワイド文字で構成されることを指定できます。 C++11 では、文字リテラルの前に uU 接頭辞をつけることで、その文字リテラルが Unicode 文字を UTF-16(char16_t データ型)または UTF-32(char32_t データ型)エンコーディングで、含んでいることを指定することができます(「Unicode 文字型とリテラル(C++11)」参照)。

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

  • '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 バイトのメモリが割り当てられます。

関連項目