Функция getche() не завершает работу программы должным образом, поэтому я хочу попробовать функцию exit (int status). Как это работает на языке программирования Turbo C++? Я не могу понять объяснение в соответствующих справочных модулях, и я ищу лучшего объяснения ... Например. с чем состоит параметр функции? Заранее спасибо!О функции exit() в C++
ответ
Параметр представляет собой целочисленный код состояния, который возвращается в вызывающую оболочку в качестве статуса выхода процесса. Exit сам должен выйти из процесса, чтобы очистить все открытые ресурсы, которые использует ваш процесс.
Не на 100% уверены, что вы имеете в виду. Параметр функции выхода («int status») - это число, которое возвращается в оболочку. Традиционно это значение равно нулю, если ваша программа прошла успешно и> 0, если по какой-то причине программа не удалась. Функция очистит различные вещи, а затем выйдет из программы.
Параметр Exit() - это int, указывающий причину или состояние процесса выхода.
Мальчик, это звучит не очень хорошо. Позвольте мне попробовать еще раз: это значение, которое возвращается обратно либо в начальный процесс (процесс, который использовал CreateProcess() или ShellExecute(), чтобы запустить тот, который выходит), или, в случае консольного приложения, значение для командной оболочки, доступ к которой возможен через ERRORLEVEL.
Обычно для установки статуса = 0, если вы обычно выходите, другое значение (которое может иметь значение, если вы хотите получить его, чтобы получить ошибки).
Ну. Такие функции, как 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 вызывается в других функциях, кроме вашего основного, также будет прекращена ваша программа, поэтому вместо этого может потребоваться использовать это, потому что возврат туда просто вернется из этих конкретных функций и вовсе не остановит программу.
99 раз из 100 «деструктор» - это освобождение памяти и закрытие дескрипторов файлов; вещи, которые происходят как часть выхода в любом случае. Если вы действительно должны уничтожить все, правильно зарегистрируйте обработчик atexit и очистите несколько вещей, которые ему действительно нужны. –
ты совершенно прав, я думаю (я в основном упомянул об этом, поэтому он просто в принципе знает об этом). но если у нас есть шанс, почему бы не сделать это «правильно» с самого начала :) –
Параметр представляет собой целочисленный код состояния, который передается обратно вызывающей оболочке в качестве статуса выхода процесса. Exit сам должен выйти из процесса, чтобы очистить все открытые ресурсы, которые использует ваш процесс.
Подробнее о «выходе» Функции функция
«Выход» Завершает процесс обычно, выполняя регулярные очистки для завершения процессов.
Во-первых, все функции, зарегистрированные по вызовам «atexit», выполняются в обратном порядке их регистрации. Затем все потоки закрываются и временные файлы удаляются, и, наконец, элемент управления возвращается в среду хоста.
Значение, предоставленное в качестве аргумента для выхода, возвращается в операционную систему (среду хоста) в качестве кода возврата программы или кода выхода. По соглашению, нулевой код возврата означает, что программа завершилась успешно.
Надеюсь, это очистит ваши сомнения.
- 1. Thread Fails Exit On Exit Exit - C++
- 2. C предупреждение неявное объявление функции 'exit'
- 3. atexit, exit делегат в C#
- 4. Альтернатива функции exit()?
- 5. В чем разница между exit и std :: exit в C++?
- 6. Вызов функции автоматически на std :: thread exit в C++ 11
- 7. О военнопленной функции в C++
- 8. О друга функции в C++
- 9. fork() и exit() в C
- 10. Что такое php exit в функции?
- 11. C лучший способ перебора ошибок - использование функции exit()?
- 12. exit (3) зависает в Linux C++
- 13. Путаница о виртуальной функции C++
- 14. Уточнить о функции тела/C++
- 15. Смущенный о выходе функции C#
- 16. предупреждение о C указатель функции
- 17. C++ Вопрос о функции pow
- 18. Вопрос о функции C fopen
- 19. Cleanly Exit on Ctrl + C
- 20. вопрос о функции replace()
- 21. вопросы о виртуальной функции в C++
- 22. головоломка о функции наследования виртуального в C++
- 23. О виртуальной функции является исключением в C++
- 24. о наломать имя функции в C++
- 25. О функции, которая использует указатели в C
- 26. Один вопрос о определении функции в C++
- 27. вопрос о функции СТЛ заполнения в C++
- 28. О аргументах двоичной функции в C++
- 29. Предупреждение о нечетном указателе функции в C
- 30. Вопрос о функции Pointer В C
Что вы подразумеваете под "Функция getche() не завершает работу программы"? IIRC, getche() просто читает один символ из stdin; Я не думаю, что это связано с выходом из программы. – rmeador
Почему вы ожидаете getche (который получает символы) для завершения программы? Это бессмысленно. –