C言語のmainで、こんなコードを見ました。
int _tmain(int argc){
...
return 0;
}
Visual C++ 2008なので_tmainになっています。
0個や2個のパターンは多いですが、1個は初めてです。
調子に乗って3個目をつけてみます。
int _tmain(int argc, _TCHAR* argv[], _TCHAR *env[]){
for (int i = 0;env[i] != NULL; i++){
printf(L"%s\n", env[i]);
}
return 0;
}
なんと、環境変数が入ってます!
4個目はどうだ…コンパイル通っちゃった!!
int _tmain(int argc, _TCHAR* argv[], _TCHAR *env[], int *value){
// これは実行できる、ただ意味のありそうな値は入ってない
printf("%x\n", value);
// こっちはアウト、アドレスじゃないみたい
printf("%d\n", *value);
return 0;
}
でも、実行すると無効なアドレスを指しているということで落ちてしまいます。
たまたまメモリにある、適当な値を拾ってきているだけっぽいですね。
ちなみに、こんなmainでもコンパイルエラーにはなりません。
void * _tmain(){
return 0;
}
要は、mainと名がついていれば細かいことは気にしない性格みたいですよ。