Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712

Код возврата main

15.01.2020, 14:40. Показов 8070. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех. Определено ли стандартами C, C++, что код возврата функции main в случае успешного завершения равен 0? Если да, то будьте добры указать ссылку...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2020, 14:40
Ответы с готовыми решениями:

В чем разница между exit(код возврата) и ExitProcess (код возврата)?
Я так себе представляю, имеется два варианта выхода из приложения, с передачей кода возврата: 1. Функцией ExitProcess(код возврата); 2....

Как при запуска программы из командной строки узнать код возврата?
int main() { return 0; } Как при запуска этой программы из командной строки узнать код возврата?

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

11
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
15.01.2020, 14:49
d7d1cd, хз, мне кажется определенно, что функция main должна возвращать значение типа int, а код возврата пофигу.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
15.01.2020, 15:02  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
мне кажется определенно, что функция main должна возвращать значение типа int, а код возврата пофигу.
_stanislav, это понятно. Но так же допускается для функции main не указывать возвращаемое значение (то есть, не писать return в принципе). В этом случае функция вернет 0.
0
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
15.01.2020, 15:14
Код возврата из main() это код завершения программы в целом. Он нужен для объединения нескольких программ в конвейер, например так:
Bash
1
$ some_prog || echo "error"
В командной оболочке знаком "||" обозначается "выполнить следующую команду, если предыдущая закончилась с ошибкой". Аналогично, знак "&&" обозначает "выполнить, если закончилось без ошибки", а ";" - выполнить в любом случае. Также результат выполнения можно передать в условие if и прочие ветвления.
Таким образом, чтобы ваша программа могла взаимодействовать с другими, хорошо бы соблюдать стандарты.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
15.01.2020, 15:26  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Таким образом, чтобы ваша программа могла взаимодействовать с другими, хорошо бы соблюдать стандарты.
Так стандарт кода возврата при успехе есть или нет? Что возвращать, если программа завершилась без ошибок?
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
15.01.2020, 15:35
http://eel.is/c++draft/basic.start.main#5
A return statement ([stmt.return]) in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling std​::​exit with the return value as the argument. If control flows off the end of the compound-statement of main, the effect is equivalent to a return with operand 0 (see also [except.handle]).
http://eel.is/c++draft/support.start.term#lib:exit
[[noreturn]] void exit(int status);
Effects:
...
Finally, control is returned to the host environment. If status is zero or EXIT_­SUCCESS, an implementation-defined form of the status successful termination is returned. If status is EXIT_­FAILURE, an implementation-defined form of the status unsuccessful termination is returned. Otherwise the status returned is implementation-defined.
0
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
15.01.2020, 15:55
Цитата Сообщение от d7d1cd Посмотреть сообщение
Что возвращать, если программа завершилась без ошибок?
Ноль. Наверняка же видели в конце main'а команду return 0;. Все остальное - коды ошибок, которые при желании тоже можно анализировать "снаружи".
Кстати, если я правильно помню, диапазон возвращаемого int'а может отличаться от Си-шного. То ли он к int16_t приводится, то ли у каждой ОС свои ограничения... в общем, кодами ошибок пользуйтесь, но без фанатизма.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
15.01.2020, 16:42  [ТС]
COKPOWEHEU, спасибо. Я и сам знал, что при успехе надо возвращать 0. Но сегодня "опытный" разработчик, на мой вопрос почему в его программе при успехе возвращается 1, ответил, что это стандарт С.
Кстати, возврат 0 при успехе - это стандарт или исторически сложившаяся практика?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
15.01.2020, 17:51
Цитата Сообщение от d7d1cd Посмотреть сообщение
стандарт кода возврата при успехе есть или нет?
В стандарте, Имхо, нет вообще такого понятия "успех". И ответ на вопрос очевиден.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.01.2020, 18:33
Цитата Сообщение от Байт Посмотреть сообщение
В стандарте, Имхо, нет вообще такого понятия "успех"
https://ru.cppreference.com/w/... XIT_status
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
15.01.2020, 18:49
Цитата Сообщение от d7d1cd Посмотреть сообщение
Определено ли стандартами C, C++, что код возврата функции main в случае успешного завершения равен 0?
Не совсем понятно, о каком коде вы ведете речь: о том, что непосредственно возвращается из main, и ли о том, что программа возвращает в окружение?

Значение EXIT_SUCCESS не обязано быть равно 0. Однако эффект return 0 в main всегда эквивалентен эффекту return EXIT_SUCCESS в том смысле, что в окружение будет возвращен один и тот же код "успешного" завершения.

Если main доработала до конца без return, то код возврата эквивалентен return 0.

Если речь идет именно о том, что конкретно вернется в окружение, то стандарт не определяет ни значения, ни типа этого возврата. Стандарт языка лишь говорит, что когда вы пишете return 0 или return EXIT_SUCCESS в main, то реализации обязаны вернуть в окружение некий код "успешного завершения", который не обязательно равен 0, а зависит от реализации. То есть в ответ на return 0 в некоторой реализации физически возвращаться может, скажем, 42.

То есть в некоторых реализациях вполне может получится так, что return 0 ведет себя так же как и return 42 - оба возвращают код успешного завершения. В таких реализациях за макро EXIT_SUCCESS может скрываться либо 0, либо 42.
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
16.01.2020, 10:03  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не совсем понятно, о каком коде вы ведете речь: о том, что непосредственно возвращается из main, и ли о том, что программа возвращает в окружение?
А разве то, что возвращает main не то же самое, что программа возвращает в окружение?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Однако эффект return 0 в main всегда эквивалентен эффекту return EXIT_SUCCESS
Вот это новость! То есть, если EXIT_SUCCESS будет равен, к примеру, 42, то return 0 в main вернет в окружение 42?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
в некоторых реализациях
Реализациях чего? Стандартной библиотеки?

Значение макроса EXIT_SUCCESS обязательно равно тому, что возвращается в окружение при успешном завершении?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2020, 10:03
Помогаю со студенческими работами здесь

Добавить функцию main() в код
Помогите дописать программу только функцию main() на C++ листинг проги #ifndef COMPLEX_H #define COMPLEX_H #include...

Не выполняется код после for в функции main
Не выполняется код после for в функции main. В чем заключается ошибка? #include "stdafx.h" #include "string" ...

Разбить исходный код на main.cpp и my.h
#include <windows.h> #include <iostream> using namespace std; class vremya { public: int vvod(); int vivod(); ...

Разнести весь код из main по отдельным функциям
Нужно что-бы все вычисления проводились через функции. Как мне перенести вычисления, a1,a2,a3,b1... и так далее, из мэйна в отдельную...

Как на это код добавить аргументы функции main?
#include <iostream> #include <fstream> #include <iomanip> #include <cstdio> #include <Windows.h> using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru