Поделиться через


С использованием wmain

Блок, относящийся только к системам Майкрософт

В модели программирования Юникода можно определить широкозначную версию main функции. Используйте wmain вместо того, main чтобы писать переносимый код, который соответствует модели программирования Юникода.

Например 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 функции можно использовать любую из этих сигнатур. Затем можно передать в качестве аргументов "широкие" символы и указатель среды кодировки Юникод (необязательно) в программу. Компилятор Майкрософт также позволяет wmain иметь возвращаемый тип void , если значение не возвращается. Параметры argv и envp параметры, которые wmain также можно определить как тип wchar_t**. Дополнительные сведения о аргументах см . в описании аргумента.

Среда envp

Если программа использует main функцию, среда многобайтового символа создается библиотекой времени выполнения при запуске программы. Копия среды для Юникода создается только при необходимости (например, для вызова функции _wgetenv или _wputenv). При первом вызове _wputenv или _wgetenv, если среда многобайтовой кодировки (MBCS) уже существует, создается соответствующая среда широкосимвольной строки, на которую затем указывает глобальная переменная _wenviron, представляющая собой широкосимвольную версию глобальной переменной _environ. В этот момент две копии среды (для многобайтовой кодировки и Юникода) существуют одновременно и поддерживаются операционной системой в течение всего срока жизни программы.

Аналогичным образом, если программа использует wmain функцию, во время запуска программы создается среда с широкими символами и указывает _wenviron на глобальную переменную. Среда многобайтовой кодировки MBCS (ASCII) создается при первом вызове функции _putenv или getenv, и на нее указывает глобальная переменная _environ.

Дополнительные сведения о среде MBCS см. в разделе "Интернационализация".

Завершение блока, относящегося только к системам Майкрософт

См. также

Функция main и выполнение программ