main 関数の違い

2004年10月7日 C言語
JIS C 新JIS C での、ホスト環境 main 関数の違いを( ..)φメモメモ

● main 関数の定義が変わった。

JIS C での main 関数は、下記のどちらかでなければならない。

int main(void) {/*...*/}

int main(int argc, char *argv[]) {/*...*/}
※ argc argv は、どのような名前でもよい。

新JIS C は、JIS C の方法に加えて、下記の main 関数が許されるようになった。

JIS C の方法いずれかと等価な方法。たとえば
typedef int INT; INT main(INT argc, char **argv) {/*...*/}

これら三つの方法のいずれでも無い処理系定義の方法。たとえば
void main(void) {/*...*/}
int main(int argc, char *argv[], char *env[]) {/*...*/}

● main 関数の最初の呼び出しからの復帰が変わった。
※ main 関数も、再帰関数呼出し(リカーシブルコール)が許される(はず)なので、「最初の呼び出し」と限定されている(ような気がする(^_^; )。

JIS C では、返す値を引数として持つ exit 関数と等価。

新JIS C でも、返す値の型が int と適合する場合は JIS C と同じだが、下記が加わった。

返す値の型が int と適合する場合、終了する } に達すると値 0 を返す。
※つまり、return 0; と書かなくても、終端 } に達して終了したら値 0 を返す。

返却値の型が int と適合しない場合、戻される終了状態は未規定。

コメント