SDL のセットアップに苦労した後、SDL が main を置き換えるマクロを定義していることに気付きました。
#define main SDL_main
// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
argc
メイン関数におよびargv
パラメータが定義されていない場合、これによりコンパイル エラーが発生することもあります。
このマクロを見ると頭が痛くなります... なぜ SDL は main を再定義する必要があるのですか? さらに検索したところ、何人かの人々が#undef main
、通常の方法で使用していることがわかりました。
これが問題です: なぜ SDL は main を再定義する必要があるのでしょうか? それは何をするのでしょうか? それを定義解除することに副作用はありますか?
私が気づいたことの 1 つは、SDL が標準出力とエラーをファイルにリダイレクトすることです (そして、この動作は望ましくありません)。