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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 299, средняя оценка - 4.76
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

int main() или int main(void)? - C++

04.04.2010, 14:32. Просмотров 41037. Ответов 21
Метки нет (Все метки)

Показать, что функция не принимает никаких аргументов можно с помощью void. В языке С++ (не в С) принятно, что пустые скобки равнозначны void. (В языке С пустые скобки означают что вы ничего не собщаете о наличии аргументов )
чем отличается :
не сообщаю о наличии аргументов
функция не принимает никаких аргументов.......
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2010, 14:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос int main() или int main(void)? (C++):

В чем разница между int main(){} и int main(void){}? - C++
Только недавно начал изучать язык, и появилось несколько вопросов: 1) в чем разница между int main(){} и int main(void){}? 2) в чем...

Какой новые синтаксис: int main() VS. void main() - C++
Долго не занимался программированием , но тут жена решила поучится , да и сам повторить ,так вот столкнулся с такой темой на 4pda может...

Какая разница между int main и void main? - C++
какая разница между (int main) i (void main)?

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.

Использование int или void в качестве возвращаемого типа для main() - C++
Когда использовать int main, а когда void main?

Почему в одних случаях пишут void main(), а в других случаях int main() {return 1;} - C++
Препод мне доказывает, что void в main`е писать неправильно, а объяснить не может почему. Кто расскажет?)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.04.2010, 14:33 #2
ничем
Evg
Эксперт CАвтор FAQ
17621 / 5845 / 375
Регистрация: 30.03.2009
Сообщений: 16,122
Записей в блоге: 26
04.04.2010, 20:22 #3
Независимо ни от чего в функцию main параметрами передаётся то, что положено передаваться: argc, argv и на некоторых системах envp. Что ты опишешь в качестве параметров - мягко говоря пофигу. Ты можешь туда структуру записать - компилятору всё равно
Farkhadus
Сообщений: n/a
19.08.2011, 18:41 #4
в чем тогда разница

C++
1
2
3
4
5
6
7
8
9
10
int main ()
{  
    double litters, gallons;
    cout<< "eta proga pokazivaet koli4estvo litrov" << endl;
    cin >> gallons; // vvodim galoni
    litters = gallons * 3.78;
    cout << "litrov " << litters << endl;
    cin.get();
    cin.get();
}

И
C++
1
void main ()
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.08.2011, 18:51 #5
Farkhadus, в стандарте описано всего две перегруженных функции main:
C++
1
2
int main();
int main(int argc, char *argv[]);
Как видно, обе имеют тип возвращаемого значения int.
Некоторые компиляторы не пропускают код, в котором main имеет тип возвращаемого значения void. Те, которые пропускают - формально не соответствуют стандарту.

Только вот вопрос был о другом.

Добавлено через 3 минуты
Цитата Сообщение от niXman Посмотреть сообщение
ничем
Вообще-то, если говорить о С, а не о С++, то там была разница. Если прототип функции содержал просто пустые скобки, то компилятором никак не контролировалось, передаются ли в функцию параметры при вызове. Если же скобки в прототипе содержали void, попытка вызова функции с параметрами пресекалась на стадии компиляции.

Добавлено через 2 минуты
Ах ты чёрт, теперь и сам забыл, что речь идёт именно про main
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
19.08.2011, 19:07 #6
Цитата Сообщение от Farkhadus Посмотреть сообщение
в чем тогда разница

int main ()
И void main ()
Первая функция может возвращать какое-то целое число, например код ошибки. Вторая ничего не возвращает. Ряд компиляторов на вторую функцию ругнутся.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
19.08.2011, 19:33 #7
Показать, что функция не принимает никаких аргументов можно с помощью void. В языке С++ (не в С) принятно, что пустые скобки равнозначны void. (В языке С пустые скобки означают что вы ничего не собщаете о наличии аргументов )
Потому что в самой первой версии языка C, не было проверки аргументов функций и даже если у таковой были параметры, её прототип имел просто пустые скобки, то есть если передать функции при вызове например два параметра вместо трех, то программа упадет только в рантайме. C компиляторы интерпретируют пустые скобки как обьявление в старом стиле и проверки аргументов не будет, а если есть void то это говорит компилятору о том что функция не принимает никаких параметров, и если например попытатся вызвать эту функцию с аргументом, это вызовет ошибку.

P.S Мне кажется в цитате, говорится не о main..
-=ЮрА=-
Заблокирован
Автор FAQ
19.08.2011, 21:23 #8
Цитата Сообщение от Krist_ALL Посмотреть сообщение
чем отличается :
не сообщаю о наличии аргументов
функция не принимает никаких аргументов.......
Цитата Сообщение от silent_1991 Посмотреть сообщение
то компилятором никак не контролировалось, передаются ли в функцию параметры при вызове.
- есть параметры которые передаются в функции косвенно.
Например объяви пару глобальных переменных и будем работать с ними в теле main() - они будут ничем не отличимы от явных параметров,
но для main параметры являются не передаваемыми, наоборот эти параметры содержат ключи командной строки которые были переданы программе
подробней тут смотри
int main() и int _tmain(int argc, _TCHAR* argv[])

Я создал специальный проект + добавил в него для тестирования ещё 3 параметра(как это сделал показал на скриншоте1,
причём с таким же успехом мы могли их передать программе через командную строку)

[Вот результат работы]

argv[0] : D:\Microsoft Visual Studio\CyberForum\TestParam\Debug\TestParam.exe
argv[1] : param2
argv[2] : param3
argv[3] : param4
Press any key to continue


PS:Как видишь если бы не исползовал функции по вылову параметров
argc = __p___argc();
argv = __p___argv();
то main() ничего бы не просигнализировал о параметрах переданных программе

Указанные функции объявлены в stdio.h, для их использования в консоле нужно ещё указать в настройках
использование библиотек MFC(см 2-й скриншот)
Миниатюры
int main() или int main(void)?   int main() или int main(void)?  
Вложения
Тип файла: rar TestParam.rar (6.5 Кб, 27 просмотров)
Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 21:42 #9
Цитата Сообщение от germeticus Посмотреть сообщение
Первая функция может возвращать какое-то целое число, например код ошибки. Вторая ничего не возвращает. Ряд компиляторов на вторую функцию ругнутся.
В обоих случаях функция main() возвращает целое число:
“Функция, вызывающая запуск программы, называется main. Реализация не объявляет прототип для этой функции. Он должен быть определен путем возврата целого типа int… Если возвращаемый тип не совместим с типом int, состояние завершения, возвращаемое в хост-среду, является не специфицированным”
Это означает, что во втором случае компилятор волен возвращать в хост-среду любое состояние,
поэтому запись вида
C++
1
void main()
это не очень умно.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
20.08.2011, 20:58 #10
Лучше писать
int main(int argc, char *argv[]);
И не пудрить мозг
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 21:27 #11
Цитата Сообщение от odip Посмотреть сообщение
Лучше писать
int main(int argc, char *argv[]);
И не пудрить мозг
А зачем? Мы что-то хотим передавать экзешнику? Если ничего не хотим, то вполне достаточно int main().
Евгеныч
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 10
20.08.2011, 21:33 #12
пробовал на простых программах ставить void -результат 0))до сложных пока недозрел))
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.08.2011, 21:34 #13
Евгеныч, В С++ нет разницы. В С есть.
Евгеныч
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 10
20.08.2011, 21:37 #14
ForEveR разница проявляеться в чем?))
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.08.2011, 21:38 #15
Евгеныч, В том, что в С функция

void foo();

может принимать любое кол-во параметров.

а функция void foo(void);

параметров не принимает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2011, 21:38
Привет! Вот еще темы с ответами:

Void main or Int main - C++
Как правильнее использовать void или int в main? И обязательно возвращать return 0 в конце программы?

От void main() к int main() - C++
Ребят, недавно начал обучаться программированию на cpp на Windows. Перешёл на Mac ( Да, знаю, что никто его не любит и не уважает здесь, но...

int main() VS void main() - C++
Вот товарищ Герберт Шилдт считает, что функция main() должна вид int main() { return 0; } Т.е. в случае удачи выполнения...

int main() и int _tmain(int argc, _TCHAR* argv[]) - C++
При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный шаблон #include &quot;stdafx.h&quot; int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.08.2011, 21:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru