Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

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

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

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

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

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

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

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

35
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
18.08.2010, 13:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от k1ry4 Посмотреть сообщение
Mencey, раз сказано нельзя, значит нельзя.
Придётся своими словами!

Если в main не указано возращающее значени, то компилятор(по стандарту) автоматически генерирует команду return 0, но если компилятор выдаёт предупреждения то он не соответсвует стандарту C++. В книги все программы написаны без return 0.


Цитата Сообщение от Mencey Посмотреть сообщение
Лично я всегда пишу в C++ с return 0; (привычка из C).
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
18.08.2010, 15:59
Да, сейчас обратил внимание, что Страуструп в своей книжке пишет примеры программ без return 0. А еще я вычитал (не в его книжке), что некоторые среды C++ вообще игнорируют это возвращаемое значение. Оказывается мы бессмысленным сишным рудиментом пользовались!
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
18.08.2010, 16:44
Mr.X, может это и так, но я по превычке всё равно ретурн писать буду :P
0
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 16:47
Дядечка Р.Лафоре говорит: "Пиши return 0! Пиши, кому говорят!?".
А т.к. первая книга это как первый секс - запоминается навсегда. То, видимо, я всегда буду писать return
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
18.08.2010, 19:43
Кстати, в стандарте тоже в примерах с int main() нигде не используется return 0 (кроме пункта 22.2.8, который наверно писал особый фанат ретурна). Вообще, какое-то глуповатое решение в стандарте, - ввели бы void main(), и не мучали себя и людей.
Интересно, а в C++0x функция void main() присутствует?
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
18.08.2010, 23:09
Цитата Сообщение от Mr.X Посмотреть сообщение
ввели бы void main(), и не мучали себя и людей.
Программа должна вернуть вызвавшей её системе целое число, означающее код возврата. Просто тут компилятор работает по той логике, что если специально код возврата не установлен, значит всё прошло, как задумано и можно вернуть ноль. Но по-моему всё-таки не плохая привычка писать return 0; в конце программы...
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
18.08.2010, 23:17
Цитата Сообщение от Mr.X Посмотреть сообщение
Вообще, какое-то глуповатое решение в стандарте, - ввели бы void main(), и не мучали себя и людей.
Есть одно но. Есть много споров о значимости возвращаемого значения для ОС.. одни говорят что нужно, другие что нет.. я в эти спору не лезу, меня это колышет совсем. Но где-то слышал, что это очень важная деталь при программировании микроконтроллеров. И без нее - ну никак. Поэтому, я предпочитаю писать ретурн 0.

p.s: кроме того, никто не запрещает дебажить путем отлова возвращаемых значений.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.08.2010, 09:54
Возвращаемое значение программы важно в том случае, если в зависимости от успешного или неудачного завершения программы должны выполняться другие:
Bash
1
2
3
4
#!/bin/bash
./application && echo success #Если программа вернет 0, тогда запустится echo
# Или так
! ./application && echo failure #Если программа вернет не 0, тогда запустится echo
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2010, 12:36
Цитата Сообщение от easybudda Посмотреть сообщение
Программа должна вернуть вызвавшей её системе целое число, означающее код возврата. Просто тут компилятор работает по той логике, что если специально код возврата не установлен, значит всё прошло, как задумано и можно вернуть ноль. Но по-моему всё-таки не плохая привычка писать return 0; в конце программы...
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Есть одно но. Есть много споров о значимости возвращаемого значения для ОС.. одни говорят что нужно, другие что нет.. я в эти спору не лезу, меня это колышет совсем. Но где-то слышал, что это очень важная деталь при программировании микроконтроллеров. И без нее - ну никак. Поэтому, я предпочитаю писать ретурн 0.

p.s: кроме того, никто не запрещает дебажить путем отлова возвращаемых значений.
Не вижу тут противоречия. Почему бы функции void main() втихаря от пользователя не вернуть системе этот ноль, если он ей так нужен. Мне кажется, что это будет меньшим издевательством над здравым смыслом, чем int main() без ретурна.
А если пользователь захочет что-то осмысленное вернуть системе, и даже знает зачем ей это нужно, то он может int main() использовать.
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
19.08.2010, 12:44
а разве void main() неправельно?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
19.08.2010, 12:49
Цитата Сообщение от Mr.X Посмотреть сообщение
Не вижу тут противоречия. Почему бы функции void main() втихаря от пользователя не вернуть системе этот ноль, если он ей так нужен. Мне кажется, что это будет меньшим издевательством над здравым смыслом, чем int main() без ретурна.
Это хорошо, когда программа удачно завершилась. А если при выполнении ошибка случилась? Файл не открылся, соединение с чем-нибудь не установилось, etc... Это для простоты мы тут в случае ошибки всегда 1 возвращаем. А если всё по-взрослому делать, так надо ещё и соответствующий код ошибки возвращать. В *NIX системах есть файл /usr/include/sysexits.h примерно такого содержания:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
 * Copyright (c) 1987, 1993
 *      The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by the University of
 *      California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *      @(#)sysexits.h  8.1 (Berkeley) 6/2/93
 */
 
#ifndef _SYSEXITS_H_
#define _SYSEXITS_H_
 
/*
 *  SYSEXITS.H -- Exit status codes for system programs.
 *
 *      This include file attempts to categorize possible error
 *      exit statuses for system programs, notably delivermail
 *      and the Berkeley network.
 *
 *      Error numbers begin at EX__BASE to reduce the possibility of
 *      clashing with other exit statuses that random programs may
 *      already return.  The meaning of the codes is approximately
 *      as follows:
 *
 *      EX_USAGE -- The command was used incorrectly, e.g., with
 *              the wrong number of arguments, a bad flag, a bad
 *              syntax in a parameter, or whatever.
 *      EX_DATAERR -- The input data was incorrect in some way.
 *              This should only be used for user's data & not
 *              system files.
 *      EX_NOINPUT -- An input file (not a system file) did not
 *              exist or was not readable.  This could also include
 *              errors like "No message" to a mailer (if it cared
 *              to catch it).
 *      EX_NOUSER -- The user specified did not exist.  This might
 *              be used for mail addresses or remote logins.
 *      EX_NOHOST -- The host specified did not exist.  This is used
 *              in mail addresses or network requests.
 *      EX_UNAVAILABLE -- A service is unavailable.  This can occur
 *              if a support program or file does not exist.  This
 *              can also be used as a catchall message when something
 *              you wanted to do doesn't work, but you don't know
 *              why.
 *      EX_SOFTWARE -- An internal software error has been detected.
 *              This should be limited to non-operating system related
 *              errors as possible.
 *      EX_OSERR -- An operating system error has been detected.
 *              This is intended to be used for such things as "cannot
 *              fork", "cannot create pipe", or the like.  It includes
 *              things like getuid returning a user that does not
 *              exist in the passwd file.
 *      EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp,
 *              etc.) does not exist, cannot be opened, or has some
 *              sort of error (e.g., syntax error).
 *      EX_CANTCREAT -- A (user specified) output file cannot be
 *              created.
 *      EX_IOERR -- An error occurred while doing I/O on some file.
 *      EX_TEMPFAIL -- temporary failure, indicating something that
 *              is not really an error.  In sendmail, this means
 *              that a mailer (e.g.) could not create a connection,
 *              and the request should be reattempted later.
 *      EX_PROTOCOL -- the remote system returned something that
 *              was "not possible" during a protocol exchange.
 *      EX_NOPERM -- You did not have sufficient permission to
 *              perform the operation.  This is not intended for
 *              file system problems, which should use NOINPUT or
 *              CANTCREAT, but rather for higher level permissions.
 */
 
#define EX_OK           0       /* successful termination */
 
#define EX__BASE        64      /* base value for error messages */
 
#define EX_USAGE        64      /* command line usage error */
#define EX_DATAERR      65      /* data format error */
#define EX_NOINPUT      66      /* cannot open input */
#define EX_NOUSER       67      /* addressee unknown */
#define EX_NOHOST       68      /* host name unknown */
#define EX_UNAVAILABLE  69      /* service unavailable */
#define EX_SOFTWARE     70      /* internal software error */
#define EX_OSERR        71      /* system error (e.g., can't fork) */
#define EX_OSFILE       72      /* critical OS file missing */
#define EX_CANTCREAT    73      /* can't create (user) output file */
#define EX_IOERR        74      /* input/output error */
#define EX_TEMPFAIL     75      /* temp failure; user is invited to retry */
#define EX_PROTOCOL     76      /* remote error in protocol */
#define EX_NOPERM       77      /* permission denied */
#define EX_CONFIG       78      /* configuration error */
 
#define EX__MAX 78      /* maximum listed value */
 
#endif /* !_SYSEXITS_H_ */
В винде всё ещё запущеннее - в MSDN поищите про коды завершения программы...
И вот как всё это завернуть в программу, которая системе всегда 0 возвращает?
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2010, 12:50
Цитата Сообщение от nikkka Посмотреть сообщение
а разве void main() неправельно?
В стандарте ее нет.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
19.08.2010, 12:53
Цитата Сообщение от Mr.X Посмотреть сообщение
А если пользователь захочет что-то осмысленное вернуть системе, и даже знает зачем ей это нужно, то он может int main() использовать.
Не сразу эту строку прочитал, поторопился... В любом случае проблема - попробуйте описать две функции с одинаковым именем, одна из которых возвращает значение типа int, вторая ничего не возвращает - void, при этом обе могут принимать по два аргумента - int и char**...
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2010, 13:03
Цитата Сообщение от easybudda Посмотреть сообщение
Это хорошо, когда программа удачно завершилась. А если при выполнении ошибка случилась? Файл не открылся, соединение с чем-нибудь не установилось, etc... Это для простоты мы тут в случае ошибки всегда 1 возвращаем. А если всё по-взрослому делать, так надо ещё и соответствующий код ошибки возвращать...
И вот как всё это завернуть в программу, которая системе всегда 0 возвращает?
Ну так я ж и говорю, что если после любого завершения программы нам не требуется от операционной системы никаких действий, то нам незачем информировать ее о виде произошедшей ошибки.
А в противном случае использовать int main().
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
19.08.2010, 13:20
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну так я ж и говорю, что если после любого завершения программы нам не требуется от операционной системы никаких действий, то нам незачем информировать ее о виде произошедшей ошибки.
А в противном случае использовать int main().
По-моему сегодняшнее положение дел правильнее. Если не хочешь возвращать ничего, пусть автоматически возвращается ноль.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
19.08.2010, 15:39
Цитата Сообщение от fasked Посмотреть сообщение
По-моему сегодняшнее положение дел правильнее. Если не хочешь возвращать ничего, пусть автоматически возвращается ноль.
Полностью согласен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2010, 15:39
Помогаю со студенческими работами здесь

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

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

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

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

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; ...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru