或阿呆のブログ

巷では、武器商人@ダーツで通っています。Python好き好きプログラマーです。芥川龍之介、太宰治が好きです。

C言語の基本の基本〜Hello,World!を出力する。に失敗しちゃったの巻。

一番最初に「Hello,World!」を出力するプログラムを書くとき、本に書いてあるようにやれば問題無く出るんだろうけど、なんだか面白みがないのでひねくれてみた。

おそらくこんなサンプルコードが書かれているに違い無い。

#include <stdio.h>

int main(void)
{
	printf("Hello,World!\n");
}

で、

#include

はおまじないみたいなものとお決まりの文句。htmlとかのドキュメントの宣言とかならおまじないで済ますでいいんだろうけど、C言語やるならもうちょっとましな説明を付したほうがいいんじゃないかと。


試しに、以下のソースコード test.c をコンパイルしてみる。

int main(void)
{
}

問題無くコンパイルは行われる。a.outも生成されていたし。

次に、以下のソースコード test.c をコンパイルしてみる。

int main(void)
{
	printf("Hello,World!\n");
}
$gcc test.c 
test.c: In function ‘main’:
test.c:3:2: warning: incompatible implicit declaration of built-in function ‘printf[enabled by default]

コンパイルエラーでめちゃくちゃ怒られました・・・。
重要なのはここだと思うんだけどな・・・。

printfの宣言ないぞって怒られているんだから、すぐわかる。

俺から見ると、

#include

はおまじないでもなんでもなくて、コンパイラが原因を教えてくれる、明らかな手続きだと思うんだ。
手続きを経ないでコンパイルすると、コンパイラが手続き不足だと教えてくれる。

じゃぁ、次は手続きをちゃんとしようねという話に持っていくのが正しいアプローチ。

「Hello,World!」くらいだったら、このぐらい杜撰なアプローチでもお勉強する人にとっては特に害は無いと思うんだけど、経験何年かのプログラマが、コンパイラがダイレクトに明確に誤りを教えてくれているのに、頭を抱えて固まってしまう人が多いことには驚いた。原因は、最初の学習の姿勢なんじゃないかと思う。とにかく、コンパイルエラーは読めて、解決出来るようにしないとね・・・。おまじないで済ませてしまうのは、日本人だけ。よほど英語アレルギーなんだろうかね・・・。

で、正しいソースコードは、一番最初に戻るが、

#include <stdio.h>

int main(void)
{
	printf("Hello,World!\n");
}

これだってわかるんじゃないかな。

コンパイルして実行すると以下のような結果になる。

$./a.out 
Hello,World!