Форум программистов, компьютерный форум CyberForum.ru

_tmain(...) вместо main(...) Почему? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 163, средняя оценка - 4.99
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
14.07.2010, 16:52     _tmain(...) вместо main(...) Почему? #1
только что установил MVS 2010. когда создаю новы фаил, то вместо привычной мне функции main() там функция _tmain(int argc, _TCHAR* argv[]). что это такое?

я переделал имье на main(), и вроде бы всё ок. не повлияет никак?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2010, 16:56     _tmain(...) вместо main(...) Почему? #2
nikkka, Пустой проект создавай...
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
14.07.2010, 17:40     _tmain(...) вместо main(...) Почему? #3
в продолжение вопроса...
создал я пустой проект и написал такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Создание различных версий функции neg()
#include <iostream>
using namespace std;
 
int neg(int n); // neg() для int-аргумента.
double neg(double n); // neg() для double-аргумента
long neg(long n); // neg() для long-аргумента
 
int main()
{
    cout << "neg(-10): "<< neg(-10)<<endl;
    cout << "neg(9L): " << neg(9L)<<endl;
    cout << "neg(11.23): "<< neg(11.23)<<endl;
    return 0;
}
// Функция neg() для int-аргумента
int neg(int n)
{
    return -n;
}
// функция neg() для double-аргумента.
double neg(double n)
{
    return -n;
}
// Функция neg() для long-аргумента
long neg(long n)
{
    return -n;
}
Работает вроде нормально.
НО, если создавать не пустой проект, а Консольное приложение Win32(в котором не main(), а _tmain(int argc, _TCHAR* argv[])), то на этот же код вылазит ошибка... пишет, что нужен заголовок "stdafx.h", можете объяснить почему это происходит и как лучше делать?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2010, 17:48     _tmain(...) вместо main(...) Почему? #4
evgeny1503, Когда создаешь не пустой проект, создается заголовочный файл "stdafx.h". А вот дальше хз. А нужен ли вам не пустой проект?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.07.2010, 17:49     _tmain(...) вместо main(...) Почему? #5
evgeny1503, про предкомпилированные заголовки почитайте.
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
14.07.2010, 17:55     _tmain(...) вместо main(...) Почему? #6
Lavroff, просто, по-моему, проще сделать не пустой проект, и переименовать tmain(///) в main()
чем сделать пустой проект, потом еще пустой cpp файл...

CyBOSSeR, ага, надо бы.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2010, 17:57     _tmain(...) вместо main(...) Почему? #7
evgeny1503,

// TTT.cpp: определяет точку входа для консольного приложения.
//

C++
1
2
3
4
5
6
7
8
9
#include "stdafx.h"
#include <iostream>
 
 
int main(int argc, char* argv[])
{
    std::cout<<"Russian\n";
    return 0;
}
Или так.

C++
1
2
3
4
5
6
7
8
9
#include "stdafx.h"
#include <iostream>
 
 
int main()
{
    std::cout<<"Russian\n";
    return 0;
}
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
14.07.2010, 18:03     _tmain(...) вместо main(...) Почему? #8
Lavroff, не понял, что вы этим имеете ввиду?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2010, 18:11     _tmain(...) вместо main(...) Почему? #9
evgeny1503, Если хотите переделать _tmain в main при не пустом приложении, то только оставляя заголовочный файл "stdafx.h". Насколько я понял по крайней мере.
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
14.07.2010, 18:13     _tmain(...) вместо main(...) Почему? #10
и еще, если делать через пустой проект, то чтобы программа сразу не исчезла нужно прописывать system("pause"), а если не через пустой файл, то не надо.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2010, 18:18     _tmain(...) вместо main(...) Почему? #11
evgeny1503, Абсолютно не обязательно прописывать. По крайней мере в 2005/2010 версии оО

2010:

C++
1
2
3
4
5
6
#include <iostream>
int main()
{
    std::cout<<"Hello, world\n";
    return 0;
}
Не закрывается. П.С. Если использовать не пустой проект, у вас лишний заголовочный файл. Оно вам надо?
Не закрывается только из самой вижуал студио. Понял.
П.П.С. Так же закрывается через экзешник если запускать. Что пустой проект, что не пустой.
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
14.07.2010, 18:32     _tmain(...) вместо main(...) Почему? #12
Lavroff, хмм, а у меня закрывается сразу, даже увидеть ничего не успеваю...
Делал так, новый проект - общие - пустой проект, потом добавлял Файл с++
Ну это ладно; про заголовки - если их много, то это плохо? (я новичок)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2010, 18:34     _tmain(...) вместо main(...) Почему? #13
evgeny1503, Да я сам новичок почти... Да не то чтобы плохо... Но зачем? Если есть пустой проект через который делать все привычнее и проще, зачем измудряться?
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
14.07.2010, 18:45     _tmain(...) вместо main(...) Почему? #14
Lavroff, =))) ну хз. Я пока лучше с непустым поработаю, как опыта наберусь, так и буду думать)
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3782 / 1766 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
14.07.2010, 18:48     _tmain(...) вместо main(...) Почему? #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
nikkka, функция main заменена на _tmain для поддержки юникода при передаче агрументов в командной строке. Макрос _tmain описан в TCHAR.h.

Вот вам описание из MSDN : main: Program Startup.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.07.2010, 03:03     _tmain(...) вместо main(...) Почему? #16
Цитата Сообщение от evgeny1503
а у меня закрывается сразу, даже увидеть ничего не успеваю...
C++
1
std::cin.get();
C
1
getchar();
ещё есть system(), вызывающая отдельную программу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2010, 12:56     _tmain(...) вместо main(...) Почему?
Еще ссылки по теме:

C++ Почему не хочет возвращать main() ?
Почему не компилируется код в котором описание класса стоит после main C++
C++ В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2010, 12:56     _tmain(...) вместо main(...) Почему? #17
Цитата Сообщение от Lavroff Посмотреть сообщение
evgeny1503, Когда создаешь не пустой проект, создается заголовочный файл "stdafx.h". А вот дальше хз.
Lavroff, когда создается непустой проект студия по-умолчанию устанавливает опцию использования предкомпилированных заголовков. Компилятор берет содержание файла stdafx.h (в который нужно включать только файлы, которые очень редко изменяются, стандартные заголовочные файлы - лучшие кондидаты на включение в stdafx.h), после обработки препроцессором, компилирует и результат компиляции помещает в специальный файл расширения pch. В дальнейшем, если содержание файла stdafx.h не было изменено, при компиляции программы используется ранее скомпилированный файл pch, что естественно, положительно влияет на время компиляции.

Если уж сильно не нравится наличие файлов stdafx.h и stdafx.cpp, в настройках проекта отключите использование предкомпилированных заголовков в секции C/C++ - Precompiled headers. После этого stdafx.h и stdafx.cpp можно смело удалять.
Yandex
Объявления
15.07.2010, 12:56     _tmain(...) вместо main(...) Почему?
Ответ Создать тему
Опции темы

Текущее время: 23:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru