2009-03-24 2 views
1

Функция getche() не завершает работу программы должным образом, поэтому я хочу попробовать функцию exit (int status). Как это работает на языке программирования Turbo C++? Я не могу понять объяснение в соответствующих справочных модулях, и я ищу лучшего объяснения ... Например. с чем состоит параметр функции? Заранее спасибо!О функции exit() в C++

+0

Что вы подразумеваете под "Функция getche() не завершает работу программы"? IIRC, getche() просто читает один символ из stdin; Я не думаю, что это связано с выходом из программы. – rmeador

+0

Почему вы ожидаете getche (который получает символы) для завершения программы? Это бессмысленно. –

ответ

1

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

3

Не на 100% уверены, что вы имеете в виду. Параметр функции выхода («int status») - это число, которое возвращается в оболочку. Традиционно это значение равно нулю, если ваша программа прошла успешно и> 0, если по какой-то причине программа не удалась. Функция очистит различные вещи, а затем выйдет из программы.

1

Параметр Exit() - это int, указывающий причину или состояние процесса выхода.

Мальчик, это звучит не очень хорошо. Позвольте мне попробовать еще раз: это значение, которое возвращается обратно либо в начальный процесс (процесс, который использовал CreateProcess() или ShellExecute(), чтобы запустить тот, который выходит), или, в случае консольного приложения, значение для командной оболочки, доступ к которой возможен через ERRORLEVEL.

Обычно для установки статуса = 0, если вы обычно выходите, другое значение (которое может иметь значение, если вы хотите получить его, чтобы получить ошибки).

2

Ну. Такие функции, как getch.., обычно получают символ с клавиатуры или стандартного ввода. Они иногда используются в конце программы, как этот

int main() { 
    // do many stuff... 
    // ... 
    getch(); 
} 

The Геч/getche (я не знаю, что е означает в турбо-C++), затем используются, чтобы дать пользователю изменения, чтобы увидеть вывода программы, до закрытия окон терминала (обычно это происходит в окнах). Обратите внимание, что в C и C++ есть переносимая функция, называемая getchar, которая также выполняет эту работу (ожидает ввода дополнительно, но это не причинит вреда здесь).

Но он не используется для завершения программы. После нажатия клавиши управление продолжается, а затем после завершения основной программы существует. C++ и последние версии C вставляют return 0; неявно после последнего утверждения основной функции (0 означает «успешный»). Это означает, что ваша основная функция возвращает значение 0 обратно в ОС. Но вы можете вернуть другие значения, если вы явно напишете return и поместите там другое значение. Это значение - то, что ожидает exit. Он завершает работу вашей программы и возвращает данное значение обратно в ОС.

int main() { 
    // some stuff... 
    exit(42); 
    // other stuff (note: never reached!) 
} 

Эта программа вернет значение 42 в ОС. Обычно вы только return 42; там, и он имеет тот же эффект (*).


(*) Ну, не совсем: Если у вас есть локальные переменные, деструктор тех, которые не вызывается, если вы используете exit. Но они уничтожены, и деструкторы вызываются, когда вы используете return n;. Поэтому предпочитайте return n; в главном, когда можете. exit вызывается в других функциях, кроме вашего основного, также будет прекращена ваша программа, поэтому вместо этого может потребоваться использовать это, потому что возврат туда просто вернется из этих конкретных функций и вовсе не остановит программу.

+0

99 раз из 100 «деструктор» - это освобождение памяти и закрытие дескрипторов файлов; вещи, которые происходят как часть выхода в любом случае. Если вы действительно должны уничтожить все, правильно зарегистрируйте обработчик atexit и очистите несколько вещей, которые ему действительно нужны. –

+0

ты совершенно прав, я думаю (я в основном упомянул об этом, поэтому он просто в принципе знает об этом). но если у нас есть шанс, почему бы не сделать это «правильно» с самого начала :) –

0

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

0

Подробнее о «выходе» Функции функция

«Выход» Завершает процесс обычно, выполняя регулярные очистки для завершения процессов.

Во-первых, все функции, зарегистрированные по вызовам «atexit», выполняются в обратном порядке их регистрации. Затем все потоки закрываются и временные файлы удаляются, и, наконец, элемент управления возвращается в среду хоста.

Значение, предоставленное в качестве аргумента для выхода, возвращается в операционную систему (среду хоста) в качестве кода возврата программы или кода выхода. По соглашению, нулевой код возврата означает, что программа завершилась успешно.

Надеюсь, это очистит ваши сомнения.

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