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

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

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

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

12.10.2011, 13:05. Просмотров 15131. Ответов 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) должно стоять что-то другое.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 13:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что означает команда exit(1) ? (C++):

Поясните пожалуйста что означает двоеточие и то что идет после него - C++
В 4 строчке после параметра в скобочках нету ";" или же тела функции, что не сходится с моим шаблоном в голове. Поясните пожалуйста что...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i < 8;...

Что означает запись в скобках и что возвращает return - C++
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код circleArea(float theRadius) //(1) ...

ошибка Id returned 1 exit status что может значить? - C++
при компиляции программы выдается такая ошибка undefined reference to "WinMain@16" Id returned 1 exit status без указания...

Что такое #, include, что это означает - C++
______

Что означает - C++
if(!min && number > 0) min = number; else if(min && number > 0 && number < min) min = number;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mr.kto
Сообщений: n/a
12.10.2011, 13:08 #2
exit(1)
1-выход когда всьо нормально завершылось
0-с ошыбками
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 13:22 #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";
    }
}
2
Mr.kto
Сообщений: n/a
12.10.2011, 13:24 #4
ХЗ мож
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
12.10.2011, 13:41  [ТС] #5
Всё, понял, спасибо.
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
12.10.2011, 14:45 #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 не имеет обыкновения буферизироваться, то есть может сложиться ситуация, что сообщение просто не выведется; во-вторых программа-то что дальше должна делать? Продолжать выполняться не смотря на то, что функция не отработала, как должна бы?
0
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 15:14 #7
easybudda, я же не говорю, что так надо делать

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

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

Не по теме:

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

0
alkagolik
Заблокирован
12.10.2011, 15:42 #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;
}
0
easybudda
12.10.2011, 16:02
  #12

Не по теме:

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

0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.10.2011, 16:05 #13
easybudda, а что изменится?
0
alkagolik
Заблокирован
12.10.2011, 16:11 #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
0
easybudda
12.10.2011, 16:15     Что означает команда exit(1) ?
  #15

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2011, 16:15
Привет! Вот еще темы с ответами:

Что означает if(!p) ? - C++
То есть вот этот восклицательный знак перед переменной. Я использовал только записи вроде if(p!=0) например итд

Что означает? - C++
Вот код программы: // // Программа для преобразования // градусов Цельсия в градусы Фаренгейта: // Fahrenheit = NCelsius * (212...

что означает - C++
Что означает такая инструкция? char str;

Что означает while (1) {. . . } - C++
что означает while(1){ . . .}


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.10.2011, 16:15
Ответ Создать тему
Опции темы

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