Image

Imagesafinaskar wrote in Imageru_cpp

Categories:

Как завершить работу программы, не вызывая деструкторов, но вернув нулевой код возврата (у меня консольное приложение)?
exit(0) вызывает деструкторы, а abort() возвращает ненулевой код, так что оба не подходят.

Добавление. У меня Windows XP, Microsoft Visual C++.

Проблема решена. _exit(0).

Добавление. Мне, конечно, не хотелось Вам это говорить, ну ладно придётся...
Мне 16 лет, я учусь в 11 классе.
Я участвую в олимпиадах по программированию.
В этих олимпиадах участники проявляют умение составлять программы за ограниченное время.
В погоне за скоростью дети втаптывают в грязь все парадигмы программирования.
Никто не использует ООП, даже не используют структуры.
Массивы, функции.
For, while, if, break, continue.
Да и пишут там не полноценные продукты, поддреживающие диалог с пользователем, а программы, решающие конкретные задачи. Программа должна прочитать данные из входного файла (обычно он называется input.txt) и записать в выходной (output.txt). Это чтобы тестировать было легко компьютеру. В условии задачи, говориться, что будет в входных данных, и что должно быть в выходных, но не говориться, как программа должна работать. Пусть работает как хочет, лишь бы правильные ответы выдавала.
Ученик пишет программу, оставляет на компе, уходит. Затем её тестируют на куче тестах (например, на 100). Сколько пройдёт, столько баллов получает ученик.
ИМХО :), навыки, которые дают такие олимпиады не только не помагают будущему программисту, но и мешают ему.
На вопрос "Почему ты тогда участвуешь в олимпиадах, если они такие плохие" отвечу: они дают преимущества при поступлении в вуз. Решающие.
Примеры олимпиадных задач можно найти на
http://www.acmp.ru/?main=tasks.

Так вот, после тестирования тестирующая система сообщает о результатах. Если всё OK, говорит Accepted. Если нет, то говорит тип ошибки и на каком она тесте по счёту она возникла. Например: Wrong Answer 10. Сами тесты узнать никак нельзя. Если программа возвратила ненулевой код, тип ошибки --- Runtime Error, а если не создала выходной файл --- Presentation Error.

Так вот, в моей программе есть одна функция. Если в ней возникает предвиденная ошибка (то есть та, которую я перехватил), то я хочу чтобы она подала об этом мне сигнал из тестирующей системы. Но как? А вот как. Моя программа специально генерирует одну из ошибок, а именно Presentation error (потому что реальный Presentation Error я не допущу). После этого она должна закончить работу. Но как? Во-первых нужно вернуть нулевой код возврата, а то будут Runtime Error вместо Presentation Error. Во-вторых, нельзя вызывать деструкторы. Ведь вызов этой функции в деструкторе может привести к бесконечной рекурсии.

Повторюсь, проблема уже решена: _exit(0), поэтому, пожалуйста, не пишите больше комменты.

Добавление. Забыл сказать: другие олимпиадники не используют ООП, но я использую.

Добавление. В настоящем программировании надо использовать try ... catch (см. внутри)