「文字型データ」

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

'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

  ※ 空白部分は水平タブ