Почему такое имя дает VS, исполняющей функции, в консольном приложении?
1 ответ 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 .)
Primary tabs
![]()
Forums:
argc и argv — это не что иное как так называемые «параметры командной строки»
Причём:
- argc — число переданных параметров
- argv — массив указателей на символьные строки, каждая из которых соответствует одному параметру командной строки.
Программы на C++ трактуют аргументы командной строки как параметры функции main -например —
А вот в Visual Studio мелкомягкие с удовольствие используют свой тип «надстроенный» над *char =
cin >> exit; //Даем пользователю время оценить результат
Скопируйте его в cpp файл на место предыдущего, сгенерированного кода.
Затем выберите Build (Скомпилировать) | Build Solution (Скомпилировать решение) и нажмите, по окончанию компиляции, F 5. Перед вашими глазами возникнет такое окно (Рис.2):
Рис.2
Этот пример иллюстрирует все сообщения выводимые ОС и ответ пользователя на них.
Но приступим к ознакомлению с кодом. Первые четыре записи были описаны ранее (в разделе Разбор сгенерированного кода) так что начнем познавать неизведанные дали.
☻ using namespace std – важная строка. using namespace – оператор позволяющий создавать и использовать пространства имен. Пространства имен – это что-то наподобие улиц города только в С ++. std – позволяет изолировать данные от ОС, что бы та там не напортачила. При несложных программах, таких как эта, рекомендую всегда использовать. Примечание: Если вы будете работать, с программами для Windows не следует включать пространство std в проекты.
☻ double a ; double b ; char znac ; char exit ; — это объявления переменных. Переменная – своего рода контейнер, в которое можно вмещать все что угодно, а типы показуют что в эту перемену можно сохранить. Также типы переменных «резервируют» место под переменную. Но, спросите вы, что именно хранят определенные типы данных? Вот несколько простых типов данных: