Страницы

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

среда, 27 ноября 2019 г.

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

#c++ #visual_c++


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


Ответы

Ответ 1



Всё просто. Для не-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.)

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

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