#c #function #return-type #exitstatus
#c #функция #возвращаемый тип #exitstatus
Вопрос:
я должен использовать команду exit (1) в функции. Имеет ли это какое-либо отношение к возвращаемому типу данных функции, в которой он используется?
Ответ №1:
Нет. exit
Функция никогда не возвращает, а вместо этого завершает процесс, из которого она вызвана. Компилятор C не имеет интуитивного понимания этого и обрабатывает его как любую другую void
возвращаемую функцию.
Однако это означает, что while exit
завершит вашу функцию, компилятор C не видит ее таким образом. Следовательно, ему все равно потребуется действительный возврат, иначе он будет выдавать предупреждения / ошибки (при включенном достаточно высоком уровне ошибок). Но это достаточно легко обойти
int myFunc() {
...
exit(exitCode);
return 42; // Never hit but keeps C compiler happy
}
Комментарии:
1. 1 для возврата 42. Я бы дал еще 1 за хороший ответ, однако это невозможно.
2. Правильно. Но обратите внимание, что аргумент to
exit()
используется в качестве статуса завершения для вашей программы — и значение этого кода состояния зависит от системы. В Unix-подобных системахexit(1);
обозначает сбой; на виртуальных машинах он обозначает успех. Используйтеexit(EXIT_SUCCESS);
для успеха,exit(EXIT_FAILURE);
для сбоя (объявленного в<stdlib.h>
, который вы должны#include
использовать в любом случае, если вы вызываетеexit()
). (Как частный случай,exit(0);
всегда указывает на успех.)exit(N);
эквивалентноreturn N;
inmain()
.