Usando wmain
Seção específica da Microsoft
No modelo de programação Unicode, é possível definir uma versão de caractere largo da função main
. Use wmain
em vez de main
se você quiser escrever um código portátil que obedeça ao modelo de programação Unicode.
Como main
, várias restrições se aplicam à função wmain
e não se aplicam a nenhuma outra função C. A função wmain
:
- Não pode ser declarada como
inline
. - Não pode ser declarada como
static
. - Não pode ter seu endereço usado.
- Não pode ser chamada pelo programa.
Assinatura de função wmain
A função wmain
não tem uma declaração, pois é incorporada à linguagem. Se ela tivesse, a sintaxe da declaração para wmain
seria semelhante a esta:
int wmain( void );
int wmain( int argc, wchar_t *argv[ ] );
int wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] );
A função wmain
é declarada implicitamente usando uma dessas assinaturas. Você pode usar qualquer uma dessas assinaturas ao definir a função wmain
. Em seguida, pode passar argumentos de caractere largo e, opcionalmente, um ponteiro de ambiente de caractere largo para o programa. O compilador da Microsoft também permite que wmain
tenha o tipo de retorno void
quando nenhum valor é retornado. Os parâmetros argv
e envp
para wmain
também podem ser definidos como o tipo wchar_t**
. Para obter mais informações sobre os argumentos, confira Descrição do argumento.
O ambiente dos envp
Se seu programa usa uma função main
, o ambiente de caractere multibyte é criado pela biblioteca em tempo de execução na inicialização do programa. Uma cópia de caractere amplo do ambiente é criada apenas quando necessário (por exemplo, por uma chamada para as funções _wgetenv
ou _wputenv
). Na primeira chamada para _wputenv
, ou na primeira chamada para _wgetenv
se um ambiente MBCS já existir, um ambiente correspondente de cadeia de caracteres largos será criado. Em seguida, a variável global _wenviron
, uma versão de caractere largo da variável global _environ
, apontará para esse ambiente. Nesse momento, duas cópias do ambiente (MBCS e Unicode) existirão simultaneamente e serão mantidas pelo sistema operacional durante toda a vida do programa.
Da mesma forma, se seu programa usar uma função wmain
, um ambiente de caractere amplo será criado na inicialização do programa e apontado pela variável global _wenviron
. Um ambiente de MBCS (ASCII) é criado na primeira chamada para _putenv
ou getenv
e apontado pela variável global _environ
.
Para obter mais informações sobre o ambiente do MBCS, confira Internacionalização.
Fim da seção específica da Microsoft