Использование функции выхода () - PullRequest
91 голосов
/ 11 марта 2010

Я хочу знать, как и когда я могу использовать функцию exit(), как в моей книге:

#include<stdio.h>

void main()
{
    int goals;
    printf("enter number of goals scored");
    scanf("%d",&goals);

    if(goals<=5)
        goto sos;
    else
    {
        printf("hehe");
        exit( );
    }
    sos:
    printf("to err is human");
}

Когда я запускаю его, он показывает ОШИБКУ: вызов неопределенной функции exit () .

Кроме того, я хочу знать, как я могу создать опцию, чтобы закрыть окно, в котором работает программа? Например, я создал программу на основе меню, в которой было несколько опций, и одна из них была «выйти из меню» . Как сделать так, чтобы программа выходила (т.е. закрывала окно)?

Ответы [ 13 ]

157 голосов
/ 11 марта 2010

Попробуйте использовать exit(0); вместо этого. Функция exit ожидает целочисленный параметр. И не забудьте #include <stdlib.h>.

80 голосов
/ 11 марта 2010

Функция exit объявлена ​​в заголовке stdlib, поэтому вам нужно иметь

#include <stdlib.h>

вверху вашей программы, чтобы иметь возможность использовать exit.

Также обратите внимание, что exit принимает целочисленный аргумент, поэтому вы не можете назвать его как exit(), вы должны вызвать как exit(0) или exit(42). 0 обычно означает, что ваша программа выполнена успешно, и ненулевые значения используются в качестве кодов ошибок.

Существуют также предопределенные макросы EXIT_SUCCESS и EXIT_FAILURE, например, exit(EXIT_SUCCESS);

11 голосов
/ 11 марта 2010

Попробуйте man exit .


О, и:

#include <stdlib.h>

int main(void) {
  /*  ...  */
  if (error_occured) {
    return (EXIT_FAILURE);
  }
  /*  ...  */
  return (EXIT_SUCCESS);
}
11 голосов
/ 11 марта 2010

exit(int code); объявлено в stdlib.h, поэтому вам нужно

#include <stdlib.h>

Также:
- У вас нет параметра для exit(), для него требуется int, поэтому укажите его.
- Запишите эту книгу, она использует goto, что (для всех, кроме хакеров ядра Linux) плохо, очень, очень , ОЧЕНЬ плохо

Edit:
Ох, и

void main()

тоже плохо, это:

int main(int argc, char *argv[])
7 голосов
/ 23 июня 2013

Функция exit() - это тип функции с возвращаемым типом без аргумента. Это определяется заголовочным файлом stdlib.

Вам нужно использовать ( exit(0) or exit(EXIT_SUCCESS)) или (exit(non-zero) или exit(EXIT_FAILURE) ).

4 голосов
/ 11 ноября 2013

В следующем примере показано использование функции exit().

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("Start of the program....\n");
    printf("Exiting the program....\n");
    exit(0);
    printf("End of the program....\n");
    return 0;
}

Выход

Запуск программы ....
Выход из программы ....

2 голосов
/ 06 февраля 2016

В дополнение к возвращению кода выхода в родительский процесс -

В UNIX важным аспектом, который, я думаю, был пропущен, является то, что exit () при первом вызове (в обратном порядке) всех тех функций, которые были зарегистрированы вызовом atexit ().

Подробнее см. В SUSv4.

2 голосов
/ 29 января 2015

Вы должны добавить строку с #include <stdlib.h>, чтобы включить этот заголовочный файл и exit должен возвращать значение, поэтому присвойте некоторое целое число в exit(any_integer).

1 голос
/ 17 сентября 2016

в unix-подобных операционных системах выход относится к группе системных вызовов. системные вызовы - это специальные вызовы, которые позволяют пользовательскому коду (вашему коду) вызывать код ядра. таким образом, выходной вызов выполняет определенные действия по очистке ОС перед возвратом управления ОС, он завершает программу.

#include <stdlib.h>

// example 1
int main(int argc, char *argv){
  exit(EXIT_SUCCESS);
}

// example 2
int main(int argc, char *argv){
  return 0;
}

Некоторые компиляторы выдают одинаковый код операции из обоих примеров, но некоторые этого не делают. Например, код операции из первой функции не будет включать в себя какой-либо код операции позиционирования в стеке, который будет включен во второй пример, как для любой другой функции. Вы можете скомпилировать оба примера и разобрать их, и вы увидите разницу.

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

0 голосов
/ 05 октября 2014

Используйте process.h вместо stdlib и iostream ... Это будет работать на 100%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...