Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

_tmain() почему такое название?

Почему такое имя дает VS, исполняющей функции, в консольном приложении?


Ответ

Всё просто.
Для не-Unicode-программ используется соответствующее стандарту имя main и список параметров int argc, char* argv[]
Для Unicode-программ список параметров в MSVC выглядит как int argc, wchar_t* argv[], и во избежание конфликтов с исходниками и компиляторами, соответствующими стандарту, функция называется wmain
Для программ, которые могут компилироваться и в Unicode-, и в не-Unicode-режиме, список аргументов выглядит как int argc, _TCHAR* argv[], где макрос _TCHAR определён как char или wchar_t в зависимости от значения макроса _UNICODE. Таким образом, нужно третье имя для функции. Так и было придумано имя _tmain
Всё это, конечно, требует некоторой магии компоновщика, который должен уметь определить entry point не только в функции main, как по стандарту, а и в функциях wmain/_tmain
Если вы уверены, что вам не нужно Unicode-приложение, вы можете переименовать функцию в main и дать ей список аргументов int argc, char* argv[], чтобы соответствовать стандарту. Или если вы твёрдо решили, что ваша программа будет запускаться лишь под линейкой WinNT/XP/7 (а не Win95/98), вы можете остановиться на Unicode-варианте и переименовать функцию в wmain (соответственно, аргументы должны быть int argc, wchar_t* argv[]).

Запоздалое уточнение (спасибо @alexolut): Согласно документации, _tmain определяется в при помощи typedef как main или wmain, так что в вашей программе всё равно будет либо main, либо wmain
(И да, вы можете опустить параметры, или добавить третий параметр envp, или задекларировать возвращаемый тип void.)

Комментариев нет:

Отправить комментарий