Функция exit выполняет немедленное завершение программы. Завершаемый процесс, как правило, выполняет очистку используемой памяти. Во-вторых, все функции, зарегистрированные вызовами atexit , выполняются в порядке, обратном порядку их регистрации. В таком случае, все используемые программой потоки закрываются, и временные файлы удаляются, и, наконец, управление возвращается ОС или другой программе.
Аргумент параметра value возвращается принимающей стороной (ОС или другой программой).
Параметры:
- value
Значение параметра value возвращается в родительский процесс. Как правило, возвращается значение 0 или EXIT_SUCCESS указывает на успешное завершение программы, и любое другое значение или значение макроса EXIT_FAILURE используется для указания об аварийном завершении программы.
Возвращаемое значение
Пример: исходный код программы
//пример использования функции exit #include #include #include int main() < FILE * ptrFile = fopen(«file.txt»,»r»); if (ptrFile == NULL) < std::cout else < // операции с файлом >return 0; >
Источник: cppstudio.com
Уроки C# – Нажатие клавиш в программе, событие на нажимаемые кнопки, KeyDown, KeyPreview – C#
Завершение программы C++
Функция, объявленная exit в , завершает программу C++. Значение, указанное в качестве аргумента , exit возвращается операционной системе в качестве кода возврата программы или кода выхода. Принято, чтобы нулевым кодом возврата обозначалось, что программа завершена успешно. Можно использовать константы EXIT_FAILURE и EXIT_SUCCESS , также определенные в , чтобы указать на успех или сбой программы.
Функция abort
Функция abort , также объявленная в стандартном файле , завершает программу C++. Разница между exit и abort заключается в том, что exit позволяет выполнять обработку завершения среды выполнения C++ (вызов глобальных деструкторов объектов). abort немедленно завершает программу. Функция abort обходит обычный процесс уничтожения для инициализированных глобальных статических объектов. Также осуществляется обход всей специальной обработки, которая была задана с помощью функции atexit .
Для корпорации Майкрософт. Для обеспечения совместимости Windows реализация abort microsoft может разрешить выполнение кода завершения БИБЛИОТЕКи DLL при определенных обстоятельствах. Для получения дополнительной информации см. abort .
Функция atexit
Используйте функцию , atexit чтобы указать действия, которые выполняются до завершения программы. Глобальные статические объекты, инициализированные перед вызовом , atexit не уничтожаются перед выполнением функции обработки выхода.
return оператор в main
Оператор return позволяет указать возвращаемое значение из main . Оператор return в первом main действует так же, как и любой другой return оператор. Все автоматические переменные уничтожаются. main Затем вызывает exit с возвращаемым значением в качестве параметра. Рассмотрим следующий пример.
Я УЧИЛ C# НЕДЕЛЮ :3 | Вотб что вышло!
// return_statement.cpp #include struct S < int value; >; int main() < S s< 3 >; exit( 3 ); // or return 3; >
Операторы exit и return в предыдущем примере имеют аналогичное поведение. Оба завершают программу и возвращают операционной системе значение 3. Разница заключается в том, что exit не уничтожает автоматическую переменную s , а return оператор .
Как правило, для C++ требуется, чтобы функции, имеющие типы возвращаемых значений, отличные от void возвращаемых значений. Функция main является исключением; она может завершиться без return оператора . В этом случае в вызывающий процесс возвращается конкретное значение реализации. (По умолчанию MSVC возвращает значение 0.)
Уничтожение потоков и статических объектов
При вызове exit напрямую (или после оператора из main ) объекты потока, связанные с текущим потоком return , уничтожаются. Затем статические объекты уничтожаются в обратном порядке их инициализации (после вызовов функций, указанных atexit в , если таковые имеются). В следующем примере показано выполнение такого процесса инициализации и удаления.
Пример
В следующем примере статические объекты sd1 и sd2 создаются и инициализируются перед записью в main . После завершения работы этой программы с помощью return оператора сначала sd2 удаляется, а затем sd1 . Деструктор класса ShowData закрывает файлы, связанные с этими статическими объектами.
// using_exit_or_return1.cpp #include class ShowData < public: // Constructor opens a file. ShowData( const char *szDev ) < errno_t err; err = fopen_s(w» ); >// Destructor closes the file. ~ShowData() < fclose( OutputDev ); >// Disp function shows a string on the output device. void Disp( char *szData ) < fputs( szData, OutputDev ); >private: FILE *OutputDev; >; // Define a static object of type ShowData. The output device // selected is «CON» — the standard output device. ShowData sd1 = «CON»; // Define another static object of type ShowData. The output // is directed to a file called «HELLO.DAT» ShowData sd2 = «hello.dat»; int main()
Другой способ написания этого кода — объявить ShowData объекты с областью блока, которая неявно уничтожает их, когда они выходят за пределы области:
Источник: learn.microsoft.com
Как завершить приложение в c#?
Форма закрывается, но прога продолжает висеть в памяти. Как победить?
- Вопрос задан более трёх лет назад
- 23694 просмотра
Решения вопроса 1
Помогло? Отметь решением
Попробуйте Environment.Exit(); или System.Environment.FailFast , если нужно убить процесс программы.
Но, если программа остается в памяти после Application.Exit(); , значит вы что-то делаете не так.
Ответ написан более трёх лет назад
Нравится 5 Комментировать
Источник: qna.habr.com