Hello Worldを出力するというプログラムがあります。カーニハンとリッチーの「プログラミング言語C」という本の、一番最初のサンプルプログラムとして取り上げられたものです。C言語が一般的なプログラミング言語と認識されるようになって以後に出されたプログラミング言語解説書の多くに、最も最初に提示すべきサンプルプログラム、という扱いで書かれることが多くなりました。
プログラミング言語を学ぶには、実際にプログラムを書いて動かしてみるのが一番であるというのは世の共通認識です。そしてどうせ動かすなら結果が見えるほうが良いのは言うまでもありません。というわけでHello Worldという文字列が表示され、かつそれだけしかしないプログラムは格好のサンプルだと認識されているわけです。
ただ、少なくともC言語を学ぶ場合の最初のサンプルプログラムが本当にHello Worldで良いのか、というと少し疑問があります。K&Rのサンプルは次のようなものです。
#include <stdio.h>
main()
{
printf("Hello Wrold\n");
}
いくつか思いつくままに問題点(最初のサンプルプログラムという点から評価して)をあげると、
- #includeが使われています。printfを使うために必要なのですが、プリプロセッサの説明はかなり後の方になるでしょう。
- mainの戻り値の型が指定されていません。暗黙の指定であるintになるわけですが、後で暗黙の型指定はあまり使わないようにせよ、ということを言うことになるんですけど。
- 同様にmainが値を返していません。正常終了なら0、以上終了なら0より大きい値を返すのが一般的だ、と言わねばならなくなるんですけど。
- mainの引数が省略されていいます。確かにargc、argvはここでは使わないので、無いほうが良いともいえるんですが、典型的なCプログラムなら必ずargc, argvの評価が必要になるので、書くのを抜かさないようにするのを心がけましょうっていうことになるんですけど。
- printfという可変引数を取る標準Cライブラリ関数を使っています。標準CライブラリはC言語の定義外(当時。ANSI Cでは定義されるようになりました)なので、その説明も必要になります。
- printfの戻り値を評価していません。ま、普通はしませんが(intです。引数の数を返します)、そういう意味でprintfは特殊な関数です。最初にそんな特殊なのを書かなければならないのはどうも...。
というところです。確かに止むを得ないといえる点も多いです。特にCは言語仕様で入出力機能を持たなかった、というのが効いています。でもストラなんとかさん(名前を覚えられない)のプログラミング言語C++になるともうだめです。cout << "Hello World" << endl;なんて評判の悪いオペレータオーバーロードを使っています(endlじゃなくて\nだったかも知れないですけど)。Javaなんかもそうですけど、何も無理にHello Worldにしなくても良いだろうと思うような言語は沢山あります。でもHello Worldなんですね。
そもそも入出力というのはかなり経験を積んだ人でも、スマートに書きづらい、どろどろした所です。その入出力の処理を最初のサンプルプログラムでやろうとするのが無理な話だとも言えます。じゃあどういうのが最初のサンプルプログラムとして適当なんだ、という問いに答えるのはとても難しいんですけれどもね。