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

Что означает команда exit(1) ? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 112, средняя оценка - 4.77
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
12.10.2011, 13:05     Что означает команда exit(1) ? #1
Добрый день.
Привожу кусок кода из учебника:
Функция добавления элемента в очередь:
C++
1
2
3
4
5
6
void Add(int Last, int number)
{
    if (Last==maxqueue) exit(1); //Очередь полна
    Queue[Last]=number; //Добавляет элемент number в очередь
    Last++; //Сдвигает указатель Last на один элемент вправо
}
Меня интересует строчка №3. Что здесь означает команда exit(1) ? И вообще что она означает? Мне просто казалось, что это есть команда завершения всей программы. А по идее должно быть так: мы находимся внутри main(), какие-то там команды выполняются. Потом доходим до функции void Add(int Last, int number). Управление передаётся на неё. Там вначале должна стоять проверка, если очередь уже полна, то следующие команды (а именно строчки 4 и 5) не должны выполняться, мы должны выйти из функции Add обратно в функцию main(). Но в приведённом коде мне кажется мы вообще всю программу завершим, так как там стоит exit(1). Или я что-то не правильно понимаю? Просто я читаю книгу, в которой куча опечаток и ошибок. Здесь, мне кажется, вместо exit(1) должно стоять что-то другое.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.kto
Сообщений: n/a
12.10.2011, 13:08     Что означает команда exit(1) ? #2
exit(1)
1-выход когда всьо нормально завершылось
0-с ошыбками
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 13:22     Что означает команда exit(1) ? #3
Mr.kto, наоборот, exit(0) или exit(EXIT_SUCCESS) - это успешное завершение
exit(1) - завершение с кодом ошибки 1


Alex Z, там вполне может стоять что-то другое, например, генерация исключений. Но автор книги выбрал именно такой подход - при невозможности выполнить какую-то операцию завершать работу программы аварийно с кодом 1. Может, потому, что в учебниках обычно исключения рассматривают позже

Раз у тебя функция типа void, можно было вообще написать что-то такое
C++
1
2
3
4
5
6
7
8
9
10
void Add(int Last, int number)
{
    if (Last==maxqueue) cout<<"Очередь полна!\n"; //Очередь полна
    else
    {
        Queue[Last]=number; //Добавляет элемент number в очередь
        Last++; //Сдвигает указатель Last на один элемент вправо
        cout<<"Элемент добавлен!\n";
    }
}
Mr.kto
Сообщений: n/a
12.10.2011, 13:24     Что означает команда exit(1) ? #4
ХЗ мож
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
12.10.2011, 13:41  [ТС]     Что означает команда exit(1) ? #5
Всё, понял, спасибо.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.10.2011, 14:45     Что означает команда exit(1) ? #6
Alex Z, это образец очень плохого проектирования:
Во-первых функция, намертво привязанная к некоторому глобальному объекту - уже крайне сомнительное решение.
Во-вторых функция в случае ошибки должна о ней сигнализировать, а не принимать решение о завершении программы. То есть логичнее было бы объявить её булевого типа и возвращать TRUE, если функция отработала, и FALSE, если не смогла. Ну или в С-стиле
C
1
2
3
4
5
6
int func(type_t some_params){
    /*...*/
    if ( something_is_wrong )
        return -1;
    return 0;
}

Цитата Сообщение от aeshes Посмотреть сообщение
Раз у тебя функция типа void, можно было вообще написать что-то такое
Вот так как-раз тоже лучше не делать - во-первых для сообщения об ошибках есть поток cerr (stderr), который в отличии от cout не имеет обыкновения буферизироваться, то есть может сложиться ситуация, что сообщение просто не выведется; во-вторых программа-то что дальше должна делать? Продолжать выполняться не смотря на то, что функция не отработала, как должна бы?
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 15:14     Что означает команда exit(1) ? #7
easybudda, я же не говорю, что так надо делать

Тут еще у меня вопрос: какой смысл в операции Last++, если мы Last передаем по значению, а не по ссылке? Что мы хотим таким образом менять? Это вообще правильно?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.10.2011, 15:17     Что означает команда exit(1) ? #8
Цитата Сообщение от aeshes Посмотреть сообщение
Что мы хотим таким образом менять? Это вообще правильно?
Нет, это тоже ересь. Либо Last - тоже глобальная переменная, тогда её незачем было бы передавать парпметром, либо изменённое значение сразу же потеряется при выходе из функции.

Цитата Сообщение от Alex Z Посмотреть сообщение
Привожу кусок кода из учебника:
Что за учебник такой?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.10.2011, 15:17     Что означает команда exit(1) ? #9
Либо там рекурсивный вызов нужен, тогда можно просто инкрементировать, а так логично через адрес работать. Вообще странная функция.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 15:20     Что означает команда exit(1) ? #10
наверное, если б Last был глобальным и не передавался, тоже бы работало

Не по теме:

действительно странный какой-то учебник

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.10.2011, 15:42     Что означает команда exit(1) ? #11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void f(int arg)
{
    arg *= arg;
}
 
int main(){
    int x = 10;
    printf("%d\n", x);
    f(x);
    printf("%d\n", x);
    return 0;
}
easybudda
12.10.2011, 16:02
  #12

Не по теме:

alkagolik, а если строки с int main и int x местами поменять?

fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
12.10.2011, 16:05     Что означает команда exit(1) ? #13
easybudda, а что изменится?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.10.2011, 16:11     Что означает команда exit(1) ? #14
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int x = 10;
 
void f(int arg)
{
    arg *= arg;
}
 
void f2()
{
    x *= x;
}
 
int main(){
    printf("%d\n", x);
    f(x);
    printf("%d\n", x);
    f2();
    printf("%d\n", x);
    return 0;
}
Код
~/documents/projects/system/bin/Debug$ ./system 
10
10
100
easybudda
12.10.2011, 16:15
  #15

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
easybudda, а что изменится?
ни-че-го...

fasked
12.10.2011, 16:16
  #16

Не по теме:

easybudda, а я уж было начал заподазривать неладное

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.10.2011, 16:19     Что означает команда exit(1) ? #17
такой вариант тоже ничего не меняет, но наверняка может под ребро вставить как-то
C
1
2
3
4
5
6
int x;
 
void f3(int x)
{
    x *= x;
}
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
18.10.2011, 09:16  [ТС]     Что означает команда exit(1) ? #18
Цитата Сообщение от easybudda Посмотреть сообщение
Что за учебник такой?
Называется "М. Динман - С++. Освой на примерах". Издание 2006 года. Он вроде написан для Borland C++ 5.02.
Я когда приводил примеры из него, то мне на многих форумах писали, что книга плохая, но у меня нет другой. Все советуют "Либерти - С++ за сколько то дней (не помню за сколько)", но в магазине такой книги нет, а читать с монитора мне неудобно.
solar_wind
18.10.2011, 09:33
  #19

Не по теме:

Да вы ничего не понимаете...это наверное редакторы случайно название у книжки обраезали, а на самом деле она называется "Освой на примерах как не нужно писать программы". Новая методика, поставить ученику столько граблей, что бы ему ничего не оставалось как самому во всем разобраться )

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2011, 11:03     Что означает команда exit(1) ?
Еще ссылки по теме:

Поясните пожалуйста что означает двоеточие и то что идет после него C++
C++ Что такое #, include, что это означает
C++ Что означает (//) и (#)?

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
18.10.2011, 11:03     Что означает команда exit(1) ? #20
Alex Z, список литературы. В любом мало-мальски вменяемом книжном что-нибудь, да подберёте.
Yandex
Объявления
18.10.2011, 11:03     Что означает команда exit(1) ?
Ответ Создать тему
Опции темы

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