__wargv にアクセスするとクラッシュする

どこで聞いたのか忘れたが Visual C++ には __argc, __argv, __wargv みたいなグローバル変数があって、プログラムの引数にアクセスできる。こりゃ便利だなと思って __wargv 使ってみると APPCRASH する。

そもそもこれらの変数の管轄は CRT なのかそれとも Windows SDK なのかいまいちよくわからんが、少し調べてみると

  • エントリポイントが main か WinMain の時は __argv
  • エントリポイントが wmain か wWinMain の時は __wargv

を使うということらしい。

本当は __targv を使うのが正しいやり方っぽいが、自分はマクロで Unicode 版と ANSI 版を書き分けるのが好きではないので気付かなかった。