2014-03-12 4 views
0

Если моя главная функция вызывает Foo(), который вызывает foo2(), которая имеет только одно заявление:Использование выхода() в C

exit(1);

Будет ли моя основная функция выхода с 1 тоже?

редактировать: что делать, если у меня есть вилка в основной(), и вызвать Foo в моем ребенке, то

wait(&status); 

Что было бы WEXITSTATUS?

+1

Нет, выход завершает процесс * *, что программа запущена в, устанавливая статус выхода в '1'. Ваша основная функция технически никогда не вернется. ['man exit (1)'] (http://linux.die.net/man/3/exit) –

ответ

4

Технически, нет. Программа заканчивается в точке exit(). Функционально не было бы никакой внешней разницы между

int main() { 
    return 1; 
} 

и

int foo(2) { 
    exit 1; 
} 

Внешний вызывающий приложение будет просто получить статус выхода 1, и не имеет возможности говорить, если это было от возвращения в main, или выход в foo.

+0

Черт возьми, не могли бы вы взглянуть на мое редактирование? – Pig

+0

Это 'exit (1)', а не 'exit 1'. –

+0

И имя параметра отсутствует. –

1

exit сам не возвращается, но ваша программа будет иметь статус выхода 1, если это то, о чем вы просите.

+0

Спасибо, не могли бы вы взглянуть на мое редактирование? – Pig

0

Фактически да. exit завершает всю программу с данным кодом состояния. Если вы вернете значение от main, в стандарте C указывается, что результат будет таким, как если бы вы назвали exit с тем же значением. Поэтому, если вы вызываете exit самостоятельно, main никогда не вернется, но результат будет таким же.

0

Если вы fork(), то дочерний процесс завершится со статусом 1, который будет назначен переменной status родительского процесса (тот, который запустил main()).

Будьте осторожны, однако, о том, как работает fork(), поскольку функция foo() может быть вызвана в обоих процессах, и в этом случае ваш основной процесс также будет завершен с статусом выхода 1. Если вам нужно проверить, возвращается ли значение fork() (id/pid процесса). PID = -1 произошла ошибка, PID = 0, вы находитесь в дочернем процессе; в противном случае вы находитесь в родительском процессе.

Ссылки: http://linux.die.net/man/2/wait http://linux.die.net/man/3/exit

Смежные вопросы