С использованием 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 см. в разделе "Интернационализация".
Завершение блока, относящегося только к системам Майкрософт