[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:100085] Re: C の [ void main ( void ) ]について


小野寺と申します。

/* 金曜夜につき若干アルコール汚染気味です... */

From: "K.Moriyama" <forest@xxxxxxxxxxxxx>
Subject: [linux-users:100082] C の [ void main ( void ) ]について
Date: Fri, 11 Jul 2003 22:59:54 +0900

forest>   [ C ]の入門書等に以下の記載が有りますが
forest> 
forest> void main ( void )
forest> {
forest> 	中略
forest> }
forest> 
forest> これを 
forest> 
forest> 	gcc でコンパイルするとエラー
forest> 	g++ でコンパイルすると正常終了となります。
forest> 
forest> 行頭の void を削除して [ main ( void ) ] とするか
forest> [ int main ( void ) ] とすれば、問題なくどちらでもコンパイル
forest> 出来るのですが...
forest> 
forest>   これは、入門書が間違っているのでしょうか?
はい。間違っています。

main() は、int を返す関数として宣言されなければなりません。
ところが、某M社の流儀では、main() は void(=戻値を持たない)である、と
聞いたことがあります。
そのため、そういった入門書も出てきてしまうのでしょう。

void を外すとコンパイルできるようになるのは、C では、指定されていない
(=デフォルトの)型は int になるため、main() が int 型を返すものとして
扱われるようになるためではないでしょうか。

forest> それとも gcc 側に問題があるのでしょうか?
forest> 入門書には gcc でコンパイル出来ると書いてあるのですが...
forest> 
forest> # gcc version 2.96 20000731 (Kondara MNU/Linux 2.1)
今、(私は、main() を void で宣言したことがなかったため)
私の環境(gcc 2.95.3)で "Hello World" :-) を試したところ、
warning は出ましたが、コンパイル、実行とも出来ました。
(もちろん、戻値は変です)

私の手許に、同じ環境がないため、推測になってしまいますが、
森山さんの環境でも、警告が出ているだけで、
実はコンパイル出来ているようなことはないでしょうか。

そうでない(=現在、本当にコンパイルできない)場合、
その書籍を執筆した方が確認したバージョンでは動いたため、
それで良としてしまったのかもしれません。

何れにせよ、酷い書籍を手にしてしまいましたね...

小野寺
keiichi@xxxxxxxxxxxx

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: