11.1 ARM C および C++ の文字セットと識別子

ARM C および C++ での文字セットと識別子の実装の詳細について説明します。

コンパイラに認識される識別子には以下の規則が適用されます。
  • すべての内部識別子と外部識別子で大文字と小文字が区別されます。--strict コンパイラオプションを指定している場合を除き、識別子にドル ($) 文字を含めることができます。--strict オプションを指定している場合に識別子でドル記号を使用するには、--dollar コマンドラインオプションも使用して下さい。
コンパイラに認識される文字セットには以下の規則が適用されます。
  • setlocale(LC_CTYPE, "ISO8859-1") を呼び出すと、 isupper() 関数と islower() 関数は 7 ビットの ASCII サブセットではなく、8 ビットの Latin-1 アルファベットに基づいて動作します。このロケールはリンク時に選択する必要があります。
  • ソースファイルは、現在選択しているロケールに応じてコンパイルされます。ソースファイルに ASCII 以外の文字が含まれている場合は、--locale コマンドラインオプションを使用してロケールを変更する必要があります。--locale を指定しない場合は、システムロケールが使用されます。
  • コンパイラでは、Unicode などのマルチバイト文字セットがサポートされます。このサポートは、--[no_]multibyte_chars オプションを使用して制御します。
  • ソースファイルのエンコーディングが UTF-8 または UTF-16 で、ファイルがバイト順序マークで開始される場合、コンパイラは --[no_]multibyte_chars および --locale オプションを無視して、ファイルを UTF-8 または UTF-16 と解釈します。
  • ソース文字セットのその他のプロパティはホスト固有です。
実行文字セットのその他のプロパティはターゲット固有です。 ARM® の C および C++ のライブラリは ISO 8859-1(Latin-1 アルファベット)文字セットをサポートするので、以下の特徴があります。
  • 実行文字セットは、ソース文字セットと同一です。
  • 実行文字セットの 1 文字は 8 ビットで構成されます。
  • int は 4 文字(バイト)で構成されます。メモリシステムには以下の種類があります。
    リトルエンディアン
    バイトは、最下位アドレスの最下位バイトから、最上位アドレスの最上位バイトに順序付けられます。
    ビッグエンディアン
    バイトは、最上位アドレスの最下位バイトから、最下位アドレスの最上位バイトに順序付けられます。
  • C では、すべての文字定数が int 型です。C++ では、1 文字の文字定数は char 型で、複数文字の文字定数は int 型です。4 文字までの定数は整数値で表現されます。定数の最後の文字は、整数値の最下位バイトを占有します。その前の 3 文字までは上位バイトに配置されます。未使用バイトには NUL\0)文字が埋め込まれます。
  • 1 つの文字または文字エスケープシーケンスを含むすべての整数文字定数を、ソース文字セットと実行文字セットの両方で示しています。以下の表に、サポートされている文字エスケープコードを一覧にします。

    表 11-1 文字エスケープコード

    エスケープシーケンス Char の値 説明
    \a 7 注意(ベル)
    \b 8 バックスペース
    \t 9 水平タブ
    \n 10 改行(ラインフィード)
    \v 11 垂直タブ
    \f 12 改ページ
    \r 13 キャリッジリターン
    \xnn 0xnn 16 進 ASCII コード
    \nnn 0nnn 8 進 ASCII コード
  • 文字列リテラルおよび文字定数内のソース文字セットの文字は、実行文字セットにそのままマップされます。
  • char 型のデータ項目は、デフォルトで符号なしに設定されます。これらの項目は、 signed char または unsigned char として明示的に宣言できます。
    • --signed_chars オプションを使用すると、符号付き char 型を作成できます。
    • --unsigned_chars オプションを使用すると、符号なしの char 型を作成できます。

    --signed_chars オプションおよび --unsigned_chars オプションを使用または使用せずにコンパイルされており、インタフェースまたはデータ構造を共有している変換ユニットを混合するときは、注意が必要です。
    ARM ABI では、 char を符号なしバイトとして定義します。これは、 ARM コンパイルツールに付属の C++ ライブラリで使用される解釈です。
  • ワイドキャラクタ定数に対応するワイドキャラクタへのマルチバイト文字の変換には、ロケールは使用されません。これは、一般的な実装には無関係です。
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.