Почему такое имя дает 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
определяется в <tchar.h>
при помощи typedef
как main
или wmain
, так что в вашей программе всё равно будет либо main
, либо wmain
.
(И да, вы можете опустить параметры, или добавить третий параметр envp
, или задекларировать возвращаемый тип void
.)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как правильно создать динамический массив на 100 элементов? Как удалить потом значение каждого его элемента? Как удалить весь динамический...
Как в Bada перевести строку кириллицы такой как, например, "папа" в следующий вид: "%D0%BF%D0%B0%D0%BF%D0%B0" ? Все примеры которые рассчитаны на чистый C++ не подходят