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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
#1

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

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

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

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

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

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

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

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

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

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

35
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
18.08.2010, 09:32 #2
если не писать то компил ошибку выдаст, что должно возвращаться значение
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2010, 09:40  [ТС] #3
oxotnik, Нет. Все в пределах цензуры. По дефолту в большинстве компиляторов возвращает 0. Проверьте. Важен сам вопрос, много ли людей возвращает и как все же правильнее
0
ISergey
Maniac
Эксперт С++
1379 / 890 / 54
Регистрация: 02.01.2009
Сообщений: 2,677
Записей в блоге: 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
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2010, 09:52  [ТС] #5
ISergey, Но как предпочитаете действовать вы?
0
Dzhej-Dzhej
Заблокирован
18.08.2010, 09:57 #6
а разве нельзя обьявить
C++
1
void main()
и использовать return по необходимости
или сейчас так не пишут
0
oxotnik
1591 / 1068 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
18.08.2010, 10:01 #7
и правда, gcc молчит, а студия помнится выдавала ошибки, она меня и приучила всегда возвращать значение, поэтому всегда пишу return 0;
0
ISergey
Maniac
Эксперт С++
1379 / 890 / 54
Регистрация: 02.01.2009
Сообщений: 2,677
Записей в блоге: 1
18.08.2010, 10:05 #8
Dzhej-Dzhej, Нельзя. Ошибку получите..
http://codepad.org/xBXLiCql

Добавлено через 1 минуту
Lavroff, Лично мне особого труда не составляет в конце дописать return 0;
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2010, 10:23  [ТС] #9
ISergey, Кстати void main() на многих компилях глотает. На VS даже без ворнинга. Хотя это не правильно
0
radiohobbyt
192 / 190 / 5
Регистрация: 27.01.2009
Сообщений: 548
18.08.2010, 10:53 #10
коллега пишет даже
C
1
2
3
4
5
void funk(void)
{
blablabal();
return;
}
"чтоб не расслабляться". хотя это скорее от ассемблера осталось у него
0
Skoi
16 / 16 / 1
Регистрация: 31.07.2009
Сообщений: 54
18.08.2010, 11:26 #11
Ну как показал ISergey,
Assembler
1
xor         eax,eax
Ноль в любом случае будет возвращен, так что вопрос бессмысленный. Да и вообще, обсуждения не стоит.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
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
yanyk1n
4330 / 1461 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
18.08.2010, 11:57 #13
Lavroff, есть такая неофициальная вещь (а может даже вполне и официальная) как правила хорошего кода на C++, т. е. как грамотно писАть и оформлять код (отступы, пробелы, комментарии и так далее).
И среди этих правил есть одно про рекомендуемое написание return 0 в конце main(). По мне лучше эти правила соблюдать, чтобы код был читабельным для любого Надо нарабатывать такие привычки
2
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2010, 12:01  [ТС] #14
k1ry4, Сегодня просто с человеком на форуме был спор. Вот и решил спросить, чтобы узнать что думают люди и как используют по этому поводу
0
yanyk1n
4330 / 1461 / 152
Регистрация: 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
18.08.2010, 12:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2010, 12:11
Привет! Вот еще темы с ответами:

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

Что есть argc и **argv в функции int main(int argc, char **argv)? - C++
Здраствуйте, уважаемые кодеры! Что означает argc и **argv в функции int main(int argc, char **argv), ни как не могу понять эти переменные...

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

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


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

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

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