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

В чём смысл return в main()? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Andrey040601
 Аватар для Andrey040601
2 / 2 / 3
Регистрация: 13.07.2014
Сообщений: 127
Завершенные тесты: 5
21.08.2014, 22:41     В чём смысл return в main()? #1
Есть ли смысл возвращать значение переменной в main()?
Если да - зачем?
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
 
int main()
{
 int a;
cin >> a;
return a;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
21.08.2014, 22:53     В чём смысл return в main()? #2
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Есть ли смысл возвращать значение переменной в main()?
Нету смысла
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,395
Завершенные тесты: 1
21.08.2014, 22:55     В чём смысл return в main()? #3
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Есть ли смысл возвращать значение переменной в main()?
Есть смысл для внешних программ.
0 обычно принято считать кодом успеха, другие значения - ошибкой.
Справлюсь
 Аватар для Справлюсь
23 / 23 / 5
Регистрация: 24.07.2014
Сообщений: 203
21.08.2014, 22:58     В чём смысл return в main()? #4
есть:
1. если
C++
1
2
3
int main(){...}
а не
void main(){...}
то функция должна же что то возращать?
2.еси майн возращает не 0 значит программа заканчивается с ошибкой
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
21.08.2014, 23:10     В чём смысл return в main()? #5
Погугли, зачем вообще нужен return. Изучи, что такое функции и процедуры. Да, и еще, если ты все таки хочешь что-то вернуть из программы, то так как у тебя "int main()", то ты должен вернуть переменную типа int. Но так, как уже сказано выше, принято считать, что если ты возвращаешь не нуль, то это будет значить, для той оболочки, которая запускает твою программу, что она завершилась неудачно, то есть с ошибкой. И вот то число, которые ты возвращаешь (кроме нуля) - код ошибки.
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
21.08.2014, 23:11     В чём смысл return в main()? #6
Формально - да.

А нужно бывает, если Вы пишете группы формально независимых программ, каждая из которых должна знать отработала-ли предыдущая и правильно ли. Код возврата main() попадает в систему, по моему в какую-то системную переменную, из которой его можно увидеть другой программой. Очень давно не пользовался. Усли нужно детальнее - то не ко мне.

Всегда Ваш - Etien.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 01:39     В чём смысл return в main()? #7
Цитата Сообщение от Справлюсь Посмотреть сообщение
void main(){...}
Так вообще писать нельзя.
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 01:40     В чём смысл return в main()? #8
Цитата Сообщение от Toshkarik Посмотреть сообщение
Так вообще писать нельзя.
Можно, но это уже Си.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 01:42     В чём смысл return в main()? #9
Цитата Сообщение от StasyanKO Посмотреть сообщение
Можно, но это уже Си.
И в Си нельзя.
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 01:52     В чём смысл return в main()? #10
Цитата Сообщение от Toshkarik Посмотреть сообщение
И в Си нельзя.
Как видно на скриншоте ниже, так можно писать и на C++. А на Си тем более.

В чём смысл return в main()?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 01:59     В чём смысл return в main()? #11
Если это пропускает компилятор, то это не означает, что так писать можно. В стандарте указано, что возвращаемый тип должен быть int. GCC этот код не пропустит. В Си еще может пропустит с предупрежением, так как много legacy-кода до сих пор используется.


Код
g++ test.c -o test
test.c:1:11: error: ‘::main’ must return ‘int’
test.c: In function ‘int main()’:
test.c:3:4: error: return-statement with no value, in function returning ‘int’ [-fpermissive]
Код
gcc test.c -o test -pedantic
test.c:1:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
22.08.2014, 02:00     В чём смысл return в main()? #12
Цитата Сообщение от Toshkarik Посмотреть сообщение
Так вообще писать нельзя.
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 02:01     В чём смысл return в main()? #13
Ну насчёт C++ не уверен, но вот в Си точно так делать можно
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
22.08.2014, 02:02     В чём смысл return в main()? #14
Цитата Сообщение от StasyanKO Посмотреть сообщение
Как видно на скриншоте ниже, так можно писать и на C++.
скриншот это не аргумент, тем более мелкомягкие, у них вообще свой язык С++
покажи место в стандарте где разрешается
Цитата Сообщение от Toshkarik Посмотреть сообщение
И в Си нельзя.
когда запретили?
за Си усилено не слежу,но раньше было можно
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 02:07     В чём смысл return в main()? #15
Во-первых - это раздел C++. Во-вторых - вырезка из стандарта:

The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

or equivalent; or in some other implementation-defined manner.
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
22.08.2014, 02:07     В чём смысл return в main()? #16
самое смешное что ушли от темы то
Цитата Сообщение от Andrey040601 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
 
int main()
{
 int a;
cin >> a;
return a;
}
вот на такой код действительно остается только репу чесать, а зачем здесь возвращать введенное значение?
что с ним система делать будет?
напоминает анекдот
-Доктор, я жить буду?
-А смысл?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 02:11     В чём смысл return в main()? #17
Цитата Сообщение от ValeryS Посмотреть сообщение
когда запретили?
Да вроде еще в 99, вырезка выше из 11, но там ничего не изменилось. Вроде.

Добавлено через 3 минуты
Ну и вот цитата из FAQ:
What's the deal with void main()

Under regular function calling/returning in C and C++, if your don't ever want to return anything from a function, you define it's return type as void. For example, a function that takes no arguments, and returns nothing can be prototyped as:

void foo(void);

A common misconception is that the same logic can be applied to main(). Well, it can't, main() is special, you should always follow the standard and define the return type as int. There are some exceptions where void main() is allowed, but these are on specialised systems only. If you're not sure if you're using one of these specialised systems or not, then the answer is simply no, you're not. If you were, you'd know it.

Be warned that if you post your "void main" code on the forums, you're going to get told to correct it. Responding with "my teacher said it's OK" is no defence; teachers have a bad habit of being wrong. Be safe, and post only standard code, and you'll find people concentrate on answering your other problems, rather than waste time telling you about this type of thing.
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
22.08.2014, 02:15     В чём смысл return в main()? #18
Цитата Сообщение от Toshkarik Посмотреть сообщение
Да вроде еще в 99,
посмотрю
но Keil в режиме 99 на такой код
C
1
2
3
4
5
6
7
int main()
{
while(1)
 {
 }
return 0;
}
варнингами плюется, дескать до return дело не дойдет
пишу так
C
1
2
3
4
5
6
7
void main()
{
while(1)
 {
 }
 
}
Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
There are some exceptions where void main() is allowed, but these are on specialised systems only.
все таки иногда разрешается
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 02:17     В чём смысл return в main()? #19
В этой вырезке написано, что следует, но не написано, что это обязательно. А Си я особо не увлекаюсь, но очень часто, когда искал информацию, например, о программировании микроконтроллеров, встречал void main()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 02:20     В чём смысл return в main()?
Еще ссылки по теме:

Ошыбка File1.cpp(29): E2467 'main()' cannot return a value C++
Dynamic_cast и static_cast: в чём смысл? C++
C++ В чём смысл использования указателей на функции

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

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 02:20     В чём смысл return в main()? #20
Ну собственно из того же FAQ'а:
Цитата Сообщение от Toshkarik Посмотреть сообщение
There are some exceptions where void main() is allowed, but these are on specialised systems only.
Добавлено через 28 секунд
UPD: ValeryS уже это написал
Yandex
Объявления
22.08.2014, 02:20     В чём смысл return в main()?
Ответ Создать тему
Опции темы

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