こんにちは,エラーのある世界(0)のhello.cについて,5行目の「printf」の前の空白2文字分を,日本語文字の「 」に変更して,hello4.cという名前で保存しておきます.
このファイルをコンパイルすると,エラーになります.今回もまた,実行環境1と実行環境2とで,エラーメッセージが一部異なって表示されました.
実行環境1のコマンドは:
$ cat hello4.c #include <stdio.h> int main(void) { printf("hello, world\n"); return 0; } $ cc hello4.c hello4.c: In function ‘main’: hello4.c:5:1: error: stray ‘\343’ in program printf("hello, world\n"); ^ hello4.c:5:2: error: stray ‘\200’ in program printf("hello, world\n"); ^ hello4.c:5:3: error: stray ‘\200’ in program printf("hello, world\n"); ^
実行環境1では:
実行環境2では:
実行環境2の「printf」の前に,3文字または2文字分,おかしな表示が出ます.文字による表現は困難なので,「実行環境2のコマンド」のほうは,省略します.
どちらの実行環境でも,エラーを報告する行の最初は「hello4.c:5:1: error: stray ‘¥343’ in program」です.このうち「stray」は「はぐれた」または「範囲を超えた」という意味の形容詞です.ここではhello4.cの5行目の1文字目が,Cで'¥343'と表すことのできる文字であり,この文字はコンパイルのしようがない*1のでエラー,と言っています.
「stray」を含むCのコンパイルエラーを見かけたら,全角空白または日本語文字の記号が,その行に入っている,と考えるのがよいでしょう.テキストエディタでその行にカーソルを移動させ,右のキーをリズムよく押しながら,行全体でカーソルを動かしてみると,ASCII文字の1文字分よりも大きく,カーソルが動くことがあります*2.そこが,修正すべき日本語文字の箇所となります.
なお,3つのエラーで「‘¥343’」「‘¥200’」「‘¥200’」が縦に並んでいますが,それぞれ1バイトとしてこの3バイトで,UTF-8における全角空白1文字分の文字コードを表します*3.他の日本語文字なら他の値になります.