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

Функция main () {} - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
18.06.2012, 12:09     Функция main () {} #1
Есть разные варианты синтаксиса функции мэйн

1.void main () {}
2. int main () {return 0;}
3. int main() {}
4. main (void) {}
5. int main(int argc,char**argv)
6. int main(int argc,char*argv[])


C++
1
2
3
4
5
#include <iostream>
using namespace std;
bla-bla main (bla-bla) {
system ("pause");
}
Мой вопрос какой синтаксис лучше и чем это все хозяйство отличается
Я где то прочитал что по ИСО надо юзать 2. int main () {return 0;} все остальное пережитки прошлого или что то типа того
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 12:09     Функция main () {}
Посмотрите здесь:

C++ Функция main
C++ функция main()
Функция main C++
Функция main с аргументами C++
C++ Функция main() и ситаксические ошибки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tomaticus
 Аватар для tomaticus
46 / 46 / 2
Регистрация: 02.01.2011
Сообщений: 505
19.06.2012, 13:24     Функция main () {} #21
Schizorb, может быть и запутался, но я продолжаю использовать void "namefunc"(){}.
Может еще годик, и дойду до этого
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
19.06.2012, 13:41     Функция main () {} #22
Что касается стандарта Си, то стандарт требует, чтобы main имел тип int и принимал ноль либо два аргумента. Возможно, что в Си++ такие же требования.

Цитата Сообщение от Leeto Посмотреть сообщение
1.void main () {}
2. int main () {return 0;}
3. int main() {}
4. main (void) {}
5. int main(int argc,char**argv)
6. int main(int argc,char*argv[])
В общем случае отработают все варианты, если только компилятор не запретит их компилировать. Варианты 3 и 4 являются эквивалентными для языка Си, т.к. по языку Си если не описан тип функции, то он неявно равен int'у (но так пишут только быдлокодеры и старые пердуны). В языке Си++ если не описан тип функции, то он равен void, а потому для Си++ эквивалентными являются варианты 1 и 4. Варианты 5 и 6 являются полностью эквивалентными (две разные формы записи одного и того же) и выбор между ними - лишь вопрос вкуса.

Резюмируя, можно ответить на вопрос, что в зависимости от потребностей (нужны argc/argv или не нужны) следует писать

C
int main (void) { ... ; return 0; }
либо

C
int main (int argc, char **argv) { ... ; return 0; }
либо

C
int main (int argc, char *argv[]) { ... ; return 0; }
В этом случае есть гарантия, что это дело сожрётся любым компилятором на любой операционной системе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 19:55     Функция main () {}
Еще ссылки по теме:

функция main обработка параметров командной строки C++
C++ Не работает функция вывода в main()
C++ Функция не видит переменных из main

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

Или воспользуйтесь поиском по форуму:
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
19.06.2012, 19:55     Функция main () {} #23
Цитата Сообщение от tomaticus Посмотреть сообщение
Schizorb, может быть и запутался, но я продолжаю использовать void "namefunc"(){}.
Может еще годик, и дойду до этого
ф-ции делают int и пишут return 0; чтобы знать успешность выполнения той или иной функции (внезапно). для нас очевидно, что ф-ция
C++
1
2
3
4
int plus(int a, int b, int& c) {
c=a+b; 
return 0;
}
в принципе не может быть не успешной, т.к. мы видим ее реализацию. Но для пользователя библиотеки, в которую эта ф-ция может быть включена, будет доступна лишь сигнатура:
C++
1
int plus(int, int, int&);
и что она там делает внутри неизвестно. может в нее включена проверка на выходы из границ (утрированный пример)? тогда нужно проверять это и считать в этом случае не успешным выполнением.
отчасти в C++ эту проблему решают исключения. другие идут дальше и возвращают не просто безликое число, а создают перечисление с результатом ф-ции, а-ля enum plus_result {BAD_ARGUMENTS,RESULT_OVERFLOW,UNKNOWN}, или создают целый класс, для большей гибкости.

кроме того, ф-ции могут переписываться. а вдруг в новой реализации понадобится ввести контроль успешности выполнения, а у вас все ф-ции void? тогда придется нехило так переписывать весь код.

хотя, я считаю подобные меры чрезмерными)
Yandex
Объявления
19.06.2012, 19:55     Функция main () {}
Ответ Создать тему
Опции темы

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