小野寺と申します。
/* 金曜夜につき若干アルコール汚染気味です... */
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
References:
- Prev by Subject: [linux-users:100084] Re: C の [ void main ( void ) ]について
- Next by Subject: [linux-users:100086] Re: C の [ void main ( void ) ]について
- Previous by thread: [linux-users:100100] Re: C の [ void main ( void ) ]について
- Next by thread: [linux-users:100090] Re: C の [ void main ( void ) ]について
- Indexes:[Main][Thread]