Почему такое имя дает 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.)
Продвижение своими сайтами как стратегия роста и независимости