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 と適合しない場合、戻される終了状態は未規定。
● 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 と適合しない場合、戻される終了状態は未規定。
コメント