« SICP 4章から再開 | Main | 今日の日記 »

2007.08.27

main関数のプロトタイプ宣言

http://www.kt.rim.or.jp/~kbk/zakkicho/07/zakkicho0708c.html
http://d.hatena.ne.jp/RiSK/20070825

気になるので調べてみました。C99の規格書はここからダウンロード。
http://www.open-std.org/jtc1/sc22/wg14/www/standards

ISO/IEC 9899:TC2から
大前提の話。

5.1.2.1 Freestanding environment
In a freestanding environment (in which C program execution may take place without any
benefit of an operating system), the name and type of the function called at program
startup are implementation-defined. Any library facilities available to a freestanding
program, other than the minimal set required by clause 4, are implementation-defined.

A hosted environment need not be provided, but shall conform to the following
specifications if present.


freestanding environment(例えば組み込みの世界)なら、最初に呼ばれる関数は実装依存。この場合、main()は普通の関数だからプロトタイプ宣言してもOK。次に、ここから先は、hosted environmentについてルールですよと。freestanding environmentは、Googleによると自立環境って訳が付いていた。昔はスタンドアローン環境って呼んでいたような気もするが、僕の記憶違いかな。

そして、main関数の説明の箇所。

5.1.2.2.1 Program startup
The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:

実装環境(でいいのかな?)はmainのプロトタイプを宣言しませんとは書いてあるけど、明確に禁止はしていなそう。

ときどきの雑記帖 リターンズさんに教えていただいた、FAQでは、「 main は、 int 型の関数であり、プロトタイプ宣言しない約束になっています。」と書いてある。問題は宣言の主語だけど、上の規格書が根拠なら「The implementationはmainをプロトタイプ宣言しない」という意味かな。規格書見る限り、特に禁止はしていなそうなんだけど、複数の方から「mainはプロトタイプ宣言しちゃ駄目じゃないの?」って意見が出るって事は、実装上の問題 or 歴史的な何かがありそうな気がします。

ついでに、C++はルールが違うらしい。http://gusmachine.blog49.fc2.com/blog-entry-213.html


以下、僕的結論
・組み込み以外ではmain関数のプロトタイプ宣言は止めとこう

# C言語ならこうやって規格書見ようって気になるのに、Verilogは全然見ようともしないのはなんでだろう・・・

|

« SICP 4章から再開 | Main | 今日の日記 »

Comments

Posted by: free background check philadelphia pa | 2015.10.01 at 10:59 AM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16256333

Listed below are links to weblogs that reference main関数のプロトタイプ宣言:

« SICP 4章から再開 | Main | 今日の日記 »