Compartilhar via


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

Confira também

main função e execução do programa