’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
※ 空白部分は水平タブ