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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 112, средняя оценка - 4.77
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

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

12.10.2011, 13:05. Просмотров 14990. Ответов 19
Метки нет (Все метки)

Добрый день.
Привожу кусок кода из учебника:
Функция добавления элемента в очередь:
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
440 / 203 / 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
Эксперт CЭксперт С++
9465 / 5478 / 927
Регистрация: 25.07.2009
Сообщений: 10,502
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
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 15:14     Что означает команда exit(1) ? #7
easybudda, я же не говорю, что так надо делать

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

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

Не по теме:

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

alkagolik
Заблокирован
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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.10.2011, 16:05     Что означает команда exit(1) ? #13
easybudda, а что изменится?
alkagolik
Заблокирован
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2011, 16:15     Что означает команда exit(1) ?
Еще ссылки по теме:
Что означает %d C++
Что означает |= ? C++
C++ Что означает '\0'
C++ что означает
Что означает C++

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

Или воспользуйтесь поиском по форуму:
easybudda
12.10.2011, 16:15     Что означает команда exit(1) ?
  #15

Не по теме:

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

Yandex
Объявления
12.10.2011, 16:15     Что означает команда exit(1) ?
Ответ Создать тему
Опции темы

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