В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
1

Возврат из функции int main() в С++

18.08.2010, 09:25. Показов 6473. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Судя по всему тема довольно холиварная. Вот хотел спросить как вы предпочитаете действовать. Относится естественно только к С++.

Пишите ли вы в конце main() return 0, что имхо правильнее. Или полагаетесь на то, что система в случае успешного завершения в любом случае вернет 0?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2010, 09:25
Ответы с готовыми решениями:

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

Расчёт значений двумерного массива и их возврат в main() с однократным вызовом функции
Добрый день. Пусть некоторая функция f(a,b,...) производит расчет и записывает данные в...

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

Назначение аргументов функции int main
int main(int argc, char *argv) что эти параметры делают и какие у них функции, объясните...

35
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
18.08.2010, 09:32 2
если не писать то компил ошибку выдаст, что должно возвращаться значение
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.08.2010, 09:40  [ТС] 3
oxotnik, Нет. Все в пределах цензуры. По дефолту в большинстве компиляторов возвращает 0. Проверьте. Важен сам вопрос, много ли людей возвращает и как все же правильнее
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
18.08.2010, 09:44 4
oxotnik, Не выдаст..
Для этого кода
C++
1
2
3
4
5
#include<iostream>
 
int main(){
    return 0;
}
у меня компилятор сгенерировал такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
 
int main(){
00EC1350  push        ebp  
00EC1351  mov         ebp,esp  
00EC1353  sub         esp,0C0h  
00EC1359  push        ebx  
00EC135A  push        esi  
00EC135B  push        edi  
00EC135C  lea         edi,[ebp-0C0h]  
00EC1362  mov         ecx,30h  
00EC1367  mov         eax,0CCCCCCCCh  
00EC136C  rep stos    dword ptr es:[edi]  
    return 0;
00EC136E  xor         eax,eax  
}
00EC1370  pop         edi  
00EC1371  pop         esi  
00EC1372  pop         ebx  
00EC1373  mov         esp,ebp  
00EC1375  pop         ebp  
00EC1376  ret
и для этого
C++
1
2
3
4
5
#include<iostream>
 
int main(){
    //return 0;
}
тоже самое..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
 
int main(){
00C51350  push        ebp  
00C51351  mov         ebp,esp  
00C51353  sub         esp,0C0h  
00C51359  push        ebx  
00C5135A  push        esi  
00C5135B  push        edi  
00C5135C  lea         edi,[ebp-0C0h]  
00C51362  mov         ecx,30h  
00C51367  mov         eax,0CCCCCCCCh  
00C5136C  rep stos    dword ptr es:[edi]  
    //return 0;
}
00C5136E  xor         eax,eax  
00C51370  pop         edi  
00C51371  pop         esi  
00C51372  pop         ebx  
00C51373  mov         esp,ebp  
00C51375  pop         ebp  
00C51376  ret
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.08.2010, 09:52  [ТС] 5
ISergey, Но как предпочитаете действовать вы?
0
Заблокирован
18.08.2010, 09:57 6
а разве нельзя обьявить
C++
1
void main()
и использовать return по необходимости
или сейчас так не пишут
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
18.08.2010, 10:01 7
и правда, gcc молчит, а студия помнится выдавала ошибки, она меня и приучила всегда возвращать значение, поэтому всегда пишу return 0;
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
18.08.2010, 10:05 8
Dzhej-Dzhej, Нельзя. Ошибку получите..
http://codepad.org/xBXLiCql

Добавлено через 1 минуту
Lavroff, Лично мне особого труда не составляет в конце дописать return 0;
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.08.2010, 10:23  [ТС] 9
ISergey, Кстати void main() на многих компилях глотает. На VS даже без ворнинга. Хотя это не правильно
0
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
18.08.2010, 10:53 10
коллега пишет даже
C
1
2
3
4
5
void funk(void)
{
blablabal();
return;
}
"чтоб не расслабляться". хотя это скорее от ассемблера осталось у него
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
18.08.2010, 11:26 11
Ну как показал ISergey,
Assembler
1
xor         eax,eax
Ноль в любом случае будет возвращен, так что вопрос бессмысленный. Да и вообще, обсуждения не стоит.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.08.2010, 11:51 12
1. Стандарт (3.6.1) предусматривает только две сигнатуры функции main - int main() и int main(int argc, char** argv).
2. Тот же самый раздел Стандарта устанавливает, что, если поток выполнения достигает конца функции main без предложения return, это эквивалентно return 0;
1
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
18.08.2010, 11:57 13
Lavroff, есть такая неофициальная вещь (а может даже вполне и официальная) как правила хорошего кода на C++, т. е. как грамотно писАть и оформлять код (отступы, пробелы, комментарии и так далее).
И среди этих правил есть одно про рекомендуемое написание return 0 в конце main(). По мне лучше эти правила соблюдать, чтобы код был читабельным для любого Надо нарабатывать такие привычки
2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.08.2010, 12:01  [ТС] 14
k1ry4, Сегодня просто с человеком на форуме был спор. Вот и решил спросить, чтобы узнать что думают люди и как используют по этому поводу
0
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
18.08.2010, 12:11 15
Lavroff, просто с точки зрения компилятора код:
C++
1
2
3
4
5
int main()
{
   //some code
   return 0;
}
и
C++
1
2
3
4
int main()
{
   //some code
}
выглядит одинаковым, просто во втором случае return 0 вызывается неявно. Отсюда следует, что написание одного из варианта - дело программиста, как ему понравится, пусть и пишет
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
18.08.2010, 12:13 16
А я вообще за то, чтобы С-программы завершать функцией exit(). Вот в С++, правда, лучше этого не делать. Не так давно обсуждалось уже, почему...
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
18.08.2010, 12:45 17
Цитата Сообщение от k1ry4 Посмотреть сообщение
Lavroff, есть такая неофициальная вещь (а может даже вполне и официальная) как правила хорошего кода на C++, т. е. как грамотно писАть и оформлять код (отступы, пробелы, комментарии и так далее).
сюда еще входит именование переменных, функций, классов, методов.. и во многих компаниях - эти правила разные так что это не закон.. скорее, образец к подражанию. важно не то, чтоб твой стиль был копией кого-то, важно чтоб твой стиль был читабелен и ты придерживался его на протяжении всего кода.


Что касается int main() - я return 0 пишу. Никогда не знаешь, как поведет себя компилятор без него, а с ним - все будет в порядке.
0
yanyk1n
18.08.2010, 12:49
  #18

Не по теме:

Monte-Cristo, в любом случае я пытался донести информацию, которую ты мне поведал:friends:

0
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
18.08.2010, 13:31 19
Лично я всегда пишу в C++ с return 0; (привычка из C).

Не по теме:

Хотел выложить страницу из книги "Философия C++", но там написано, что Никакая часть книги не может быть воспроизведена в какой бы то нибыло форме без письменого разрешения владельцев авторских прав.
Люди что делать?

0
yanyk1n
18.08.2010, 13:33     Возврат из функции int main() в С++
  #20

Не по теме:

Mencey, раз сказано нельзя, значит нельзя.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2010, 13:33

int main() или int main(void)?
чем отличается : не сообщаю о наличии аргументов функция не принимает никаких аргументов.......

int main() и int _tmain(int argc, _TCHAR* argv[])
При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный...

Почему у функции main() тип возвращаемого значения - int?
Здравствуйте! В языке C# main &quot;свободный&quot;: void main (). Логично, поскольку программа - это набор...

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru