「文字型データ」

拡張表記(エスケープシーケンス)

'A'や'z'のような通常の文字の他に拡張表記(エスケープシーケンス) と呼ぶものが存在する。
例えば、今までに使ってきた printf()でメッセージを表示する際に、 "Hello World\n"のように'\n'という表記があったが、これも拡張表記の一つである。 ('\n'は改行を意味する)
'\n'のように、「\」(バックスラッシュ。windowsでは文字コードの都合で 円マークとして表示される)で始まる形式を拡張表記と呼ぶ。
※「\」を含めると2文字で表現されるが、「\」とそれに続く文字を合わせて 1文字を意味するので注意。

拡張表記には以下のようなものが存在する。(一部を紹介する)

\n    改行 (new line)
\t    水平タブ (horizontal tab)
\v    垂直タブ (vertical tab)
\b    バックスペース (backspace)
\a    アラート (alert) 
\'    シングルクォート
\"    ダブルクォート
\\    バックスラッシュ(windowsでは円マーク)
\?    疑問符

文字定数を記述する場合に1個の文字を「'」(シングルクォート)で囲んでいたが、 文字定数として「'」(シングルクォート)を記述したい場合に 下記のようにしたのでは、文法エラーになる。 (文字定数を「'」(シングルクォート)で囲むため、文字定数のつもりの「'」 (シングルクォート)が文字定数を囲むための「'」(シングルクォート)と解釈 されるためである)

char c = ''';    /* 文法エラー */
文字定数として「'」(シングルクォート)を記述したい場合は、拡張表記を使っ て'\''とする。
char c = '\'';    /* OK */
後で説明する文字列定数でも同様の問題があり、その場合は「"」(ダブルクォー ト)を拡張表記として表現する。
char string[] = "I said \"you are right.\"";    /* "(ダブルクォート)を含む文字列の場合 */

以下のサンプルコードは1文字ずつ表示する プログラムである。

#include <stdio.h>

int
main(void)
{
    /* putchar()は1文字を表示する関数 */
    putchar('A');     /* 'A' */
    putchar('\t');    /* 水平タブ */
    putchar('\'');    /* シングルクォート */
    putchar('x');     /* 'x' */
    putchar('\'');    /* シングルクォート */
    putchar('\t');    /* 水平タブ */
    putchar('B');     /* 'B' */
    putchar('\n');    /* 改行 */

    return 0;
}

実行結果は以下のようになる。 水平タブ(文字の間の空白部分)やシングルクォートが表示されている。

A       'x'     B

  ※ 空白部分は水平タブ


文責:大津