C言語のmain関数の仮引数について
最近のC言語の規格では, main関数の仮引数は基本的に
int main(void)
か
int main(int argc, char **argv)
のどちらか(またはこれらと同等のもの)にしなければならない(C99, C11).
のだが, 今日ネット上で
int main(int argc, char **argv, char **envp)
というのを見た. ので調べた.
envp
は広く利用されているが, 移植性に問題がある(C99, C11).
envp
にはargv
と同じ形式で環境変数が記憶される.
検索してヒットしたページによると, どうやらUnix系OSでは伝統的に使われていたらしい.
現代的なプログラムで環境変数を取得する場合は標準ライブラリのgetenv
を利用するべきである.
POSIXシステムならば,
#include <unistd.h> extern char **environ;
とすることで, envp
と同等のグローバル変数environ
が利用できる.
このリンクの付け方はあまりよろしくない気がする.
あと,なぜ今まで知らなかったのかよくわからないが, argv[argc] == NULL
は保証されている.