Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

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

18.06.2012, 12:09. Просмотров 2211. Ответов 22
Метки нет (Все метки)

Есть разные варианты синтаксиса функции мэйн

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;} все остальное пережитки прошлого или что то типа того
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 12:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция main () {} (C++):

функция main() - C++
может ли функция возвращать функцию int z() { ....... //надо типо того сделать return int main(); } void x() {

Функция main - C++
Ребят задание скомпилировать код в командной строке vc++ и запустить программу.Делаю так: c:\...\lab10 cl -GX user.cpp Вот...

Функция main - C++
В одномерном массиве, вводимом с клавиатуры и состоящем из 10 вещественных элементов, вычислить: 1) если задана опция -ko - ...

Функция main с аргументами - C++
Приветствую, подскажите где именно указывать параметры аргументов(int argc, char **argv), если использовать следующий тип записи int...

Функция не видит переменных из main - C++
Составьте программу, которая будет выводить на экран два разных сообщения (например, “Hello, World !” и “Hello, my darling !”),...

Функция main() и ситаксические ошибки - C++
Доброго времени суток. Написал вот такую бредятину штуку: #include &lt;windows.h&gt; #include &lt;cstring&gt; int main(); int a = 3; ...

22
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
18.06.2012, 21:39 #16
Цитата Сообщение от tomaticus Посмотреть сообщение
Да вы смеетесь?)
Почему? Информацию, которая касалась исключительно функции main ты зачем-то спроецировал на функцию с другим именем.
Касательно вывода в функциях — он там, разумеется, может быть, но если функция предназначена именно для вывода, а не, скажем, для расчёта чего-нибудь, что потом надо будет вывести. В последнем случае в функции должен быть только расчёт и возврат результата, а вывод где-нибудь в другом месте.
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
18.06.2012, 22:00 #17
в функциональном программировании есть понятие чистых функций - функций, результат действий которых очевиден и является результатом работы с входными аргументами. т.е. изменять состояние программы "в тайне" они не могут. в Haskell это чуть ли не в идеологию возведено. исключения только там, где без них не обойтись, а-ля ф-ции ввода/вывода.
вот и в других языках очень хороший тон стараться проектировать ф-ции так же.
0
Avazart
Эксперт С++
7232 / 5428 / 303
Регистрация: 10.12.2010
Сообщений: 24,123
Записей в блоге: 17
19.06.2012, 03:47 #18
Ну то что надо то понятно, но в чем задумка с возвратом нуля?...

Как я понимаю возврат поидее должен как нибудь где нибудь использоваться ...
Может при порождении процессов ???
0
enk
46 / 45 / 7
Регистрация: 16.06.2012
Сообщений: 177
19.06.2012, 04:26 #19
Цитата Сообщение от Avazart Посмотреть сообщение
Ну то что надо то понятно, но в чем задумка с возвратом нуля?...

Как я понимаю возврат поидее должен как нибудь где нибудь использоваться ...
Может при порождении процессов ???
Как вариант:
Произошла ошибка, явно требующая перезапуска программы. Вместо "halt(1)" используешь "return 0;". Мне, пока что, иначе не приходилось использовать, может гуру ещё расскажут)
А вот, кстати, топик на эту тему Стандарт или для чего нужен return 0 ?
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
19.06.2012, 10:43 #20
tomaticus, по-моему, вы немного запутались. По стандарту, функция main должна возвращать int. К остальным-то функциям это не имеет отношения. То есть, не нужно от фонаря к каждой функции приписывать int и возвращать 0
2
tomaticus
47 / 47 / 2
Регистрация: 02.01.2011
Сообщений: 505
19.06.2012, 13:24 #21
Schizorb, может быть и запутался, но я продолжаю использовать void "namefunc"(){}.
Может еще годик, и дойду до этого
0
Evg
Эксперт CАвтор FAQ
18368 / 6415 / 441
Регистрация: 30.03.2009
Сообщений: 17,795
Записей в блоге: 28
19.06.2012, 13:41 #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; }
В этом случае есть гарантия, что это дело сожрётся любым компилятором на любой операционной системе
1
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
19.06.2012, 19:55 #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? тогда придется нехило так переписывать весь код.

хотя, я считаю подобные меры чрезмерными)
0
19.06.2012, 19:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 19:55
Привет! Вот еще темы с ответами:

Не работает функция вывода в main() - C++
вот кусок кода, где не работает первый printf(Rus(&quot;Выбери тип календаря&quot;)); - точнее не выводится в консоли. void main() { int q=0,...

функция main обработка параметров командной строки - C++
Подскажите, пожалуйста, зачем могут использоваться параметры командной строки, пример какой-нибудь если можно, только не конкретный :) без...

Функция main. Является ли она точкой старта программы? - C++
Собственно, вопрос уже поднят.. Желательно аргументировать хоть как-то свой ответ, или дать ссылку на интернет ресурс, литературу, где...

Алгоритм работы функции, когда функция вызывается в main - C++
кто может кратко объяснить?


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

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