wmain
を使用する
Microsoft 固有の仕様
Unicode プログラミング モデルでは、main
関数のワイド文字バージョンを定義できます。 Unicode プログラミング モデルに準拠した移植性のあるコードを作成する場合は、main
ではなく wmain
を使用します。
main
と同様、他の C 関数には適用されない複数の制限が wmain
関数に適用されます。 wmain
関数は、次のことを行います。
inline
として宣言することはできません。static
として宣言することはできません。- そのアドレスを取得することはできません。
- プログラムから呼び出すことはできません。
wmain
関数シグネチャ
wmain
関数は、言語に組み込まれているため、宣言を持ちません。 これが行われた場合、wmain
の宣言構文は次のようになります。
int wmain( void );
int wmain( int argc, wchar_t *argv[ ] );
int wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] );
wmain
関数は、これらのシグネチャのいずれかを使用して暗黙的に宣言されます。 wmain
関数を定義するときに、これらのシグネチャのいずれかを使用できます。 さらに、ワイド文字の引数と、必要であればワイド文字環境ポインターもプログラムに渡すことができます。 Microsoft コンパイラでは、値が返されない場合、wmain
の戻り値の型として void
を使用することもできます。 wmain
に対する argv
および envp
パラメーターも、wchar_t**
型として定義できます。 引数の詳細については、「引数の説明」を参照してください。
envp
の環境
プログラムが main
関数を使用している場合、マルチバイト文字環境は、プログラムの起動時にランタイム ライブラリが作成します。 マルチバイト文字環境で使われるワイド文字のコピーは、必要に応じて作成されます (たとえば、_wgetenv
関数や _wputenv
関数が呼び出されたとき)。 _wputenv
を最初に呼び出すとき、または MBCS 環境が既に存在する場合に _wgetenv
を最初に呼び出すとき、対応するワイド文字列環境が作成され、その後は作成されたワイド文字列環境が _wenviron
グローバル変数 (_environ
グローバル変数のワイド文字バージョン) によって参照されます。 この時点までで、2 つの環境のコピー (MBCS および Unicode) が同時に存在していることになるわけですが、両方ともプログラムが消滅するまでオペレーティング システムによって保持されます。
プログラムが wmain
関数を使っている場合は、ワイド文字環境がプログラムの起動時に作成され、また _wenviron
グローバル変数によって環境のアドレスが示されます。 MBCS (ASCII) 環境は、_putenv
または getenv
を初めて呼び出したときに作成され、_environ
グローバル変数によってアドレスが示されます。
MBCS 環境の詳細については、「国際化」を参照してください。
Microsoft 固有の仕様はここまで