続、C言語の初めの一歩

Hello, world!!

やっとプログラムの説明に入れる。もう疲れた、いい加減・・・

とりあえず、プログラムをもう一度書いておく。

1	#include <stdio.h>
2
3	/* My first C language program!! */
4	int main(void)
5	{
6		printf("Hello, world!!\n");
7
8		return 0;
9	}

あれ、左に数字がついたの?っと思うかもしれないけどこれはただ、わかりやすいように行番号を打っただけ。プログラムを打つときにはもちろん、無視。

とりあえず、1行目は無視。2行目は空行。3行目はコメント。

4行目はint main(void)だが、これは単純にmain()だけでもよい。mainはintを返すし引数は取らない(取ることも出来るが)ということがANSIの規格で決まっているので書く必要がないわけだ。だから省略可とされている。

で、このmain、取り合えずmain関数と呼ぶことにしよう。「関数って何?」って話もあると思うけどそれは後ほど。今は「main関数」という固有名詞だと思っておこう。

main関数はC言語においてのエントリーポイントだ。つまり、プログラムはここから実行される。なので特殊なライブラリーを使っていない限り、絶対にどこかに書く。というか、ないとコンパイルエラーになる。

で、main関数の中身は5行目の{と9行目の}で囲まれている部分だ。ここに実際に何をしたいかを書く。

6行目にはprintfが書いてある。正確にはprintfはC言語というよりもこれまた単なる関数なんだけど要は画面に文字を表示するということだ。表示する内容は""で囲まれている部分でこの場合は"Hello, world!!\n"である。最後の\nは改行、つまりリターンのこと。1行目は取り合えず、無視って書いたけど差しあたってはこの"printf"を使うためのおまじないと思っておけばよい。

8行目のreturnは戻り値。取り合えず、main関数は戻り値として0を戻す。実はここに何の数字を書くかは厳密には処理系依存、状況依存なんだけど特に問題がなく、プログラムが終了する場合は0で問題ない。

これが最初のプログラム、たったこれだけだ。

質問コーナー

突如として現れる不定期コーナー。というより、単にてっちゃんが薀蓄をたれるコーナー。

僕の本にはvoid mainって書いてあるんだけど。

そんな本、即刻捨ててください。いや、環境を大切にしましょう。廃品回収のほうがお勧めです。

てっちゃん自身もその辺のことを始めてCを知ったときはよくわかりませんでした。Cの規格にはmainは実数型、つまりintと明記されているのでそれ以外は非文法的となるわけです。逆にCの本を買うとき、これを確認するとよいかと。これで書店にあるCの本の内、2割りが候補外に消えます。

以下はCがはじめての人は無視してくれ。というか、正しいかどうかわからないところが正直なところ。

薀蓄をかくとK&RのC(要は昔のC)では"main()"と書いていたらしい。これは省略したのではなく、規格としてこうだったらしい。ところがANSIになってからはmainは整数型で終了ステータスを返すことというようになっています。仮にvoid mainと書いた場合、これでは何も返していないので規格違反となります。その場合、exit(0)などを使って返すのであれば正しいのかもしれませんが単純にreturnを書かないのは確実に規格に反するということになります。ちなみに"void main"と書いて"exit(0)"で終了するのが正しいかどうかもよくわかりません。規格を見ると"main関数は終了コードを返す"と書いてあり、"なんらかの関数が終了コードを返せばいい"とは書かれていないからです。でも、それを言い出すと"exit(0)"の存在意義がよくわかりません・・・

似非プログラマーではこれ以上のことはわかりません。ただ、確実なのは"int main"と"return 0"を使えば間違いないということでしょう。

くわしすぎるC