使用 wmain
Microsoft 专用
在 Unicode 编程模型中,可以定义 main
函数的宽字符版本。 如果要编写符合 Unicode 编程模型的可移植代码,请使用 wmain
而不是 main
。
与 main
一样,一些限制适用于 wmain
函数,而不适用于任何其他 C 函数。 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
或首次调用 _wgetenv
时(如果 MBCS 环境已存在),会创建一个对应的宽字符字符串环境,然后通过 _wenviron
全局变量指向该环境,此变量是 _environ
全局变量的宽字符版本。 此时,同时存在该环境的两个副本(MBCS 和 Unicode),在程序的整个生存期这两个副本由操作系统维护。
同样,如果程序使用 wmain
函数,则在程序启动时创建宽字符环境并用 _wenviron
全局变量指向该环境。 MBCS (ASCII) 环境是在首次调用 _putenv
或 getenv
时创建的,并由 _environ
全局变量指向。
有关 MBCS 环境的详细信息,请参阅国际化。
结束 Microsoft 专用