わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

こんにちは,エラーのある世界 (6)ヘッダファイルの前後を丸カッコにしたら

こんにちは,エラーのある世界(0)のhello.cについて,1行目の「<stdio.h>」を,「(stdio.h)」に変更して,hello6.cという名前で保存しておきます.
このファイルをコンパイルすると,エラーになります.
コマンドは(実行環境1・2共通):

$ cat hello6.c
#include (stdio.h)

int main(void)
{
  printf("hello, world\n");

  return 0;
}
$ cc hello6.c
hello6.c:1:10: error: #include expects "FILENAME" or <FILENAME>
 #include (stdio.h)
          ^
hello6.c: In function ‘main’:
hello6.c:5:3: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
   printf("hello, world\n");
   ^~~~~~
hello6.c:5:3: warning: incompatible implicit declaration of built-in function ‘printf’
hello6.c:5:3: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’

実行環境1では:

実行環境2では:

これも,エラーです.実行ファイルは作られません.実行ファイル(a.out)があるとしても,それは以前のコンパイルが成功したときに作られたファイルです.
「hello6.c:1:10: error: #include expects "FILENAME" or 」を日本語に訳すと,「hello6.cの1行目の10文字目でエラー.『#include』と書いたらその次は『"ファイル名"』または『<ファイル名>』と書かないといけない」となります.「expect」は目的語をとる動詞で,「〜を期待する」というのがもともとの意味ですが,期待するものが書かれていなかったため,エラーを報告したわけです.
「hello6.c:5:3: warning: implicit declaration of function ‘printf’」のメッセージは,こんにちは,エラーのある世界(3)コンパイル時のメッセージに少し似ています.実はhello6.cのコンパイルにおいて,1行目でエラーが発生したけれども,それでもコンパイルを進めているのです.最後の「note:」の直後,「include ‘’ or provide a declaration of ‘printf’」について,命令文と考えればよく,日本語訳は「(printf関数を使用するのなら)ヘッダファイルのstdio.hをインクルードするか,printf関数の宣言を書きなさい」となります.
「#include 」は,1文字も間違えることなく書けるようになっておきましょう.