2010-07-23 4 views
1

У меня есть опыт работы с целью ANTLR 2 C++, но мы не решались тратить много времени на ANTLR 3 из-за моих опасений относительно безопасности исключений.ANTLR3 C Цель с исключениями на C++

К сожалению, ANTLR 3 имеет только объект C, который производит C, который является совместимым с C++. Это делает не, кажется, включают в себя C++ безопасность исключений, на основе следующего:

Вы, вероятно, можно использовать [исключения] осторожно, но, как вы отмечаете, вы должны быть осторожны, с памятью. Время выполнения отслеживает всю свою нормальную память ассигнований до тех пор, пока вы закрываете «классы» правильно, вы должны вообще быть в порядке. Тем не менее, вы должны убедиться, что исключения исключения не обходят обычное правило чистым вверх, например, ошибка сброса и флаги возврата и т. Д.

(ANTLR-interest, circa 2009)

Кто-нибудь есть опыт работы с целевой ANTLR C с (продвинутый) C++? Можно ли безопасно выбрасывать исключения? Какой дополнительный код (если есть) я должен написать, чтобы сделать его безопасным?

+0

Сообщаем вам, что вам нужно написать код, если вы используете исключения. Не указывая точно, какой код вам нужно писать. О, и не забудьте закрыть свои классы :) –

+0

Недавно я опубликовал цель C++ для ANTLR. Проверьте, полезно ли это. http://www.antlr.org/wiki/pages/viewpage.action?pageId=29130826 – Gokul

ответ

0

У меня нет опыта ANTLR (к сожалению ...), но нет способа заставить C-код работать с исключениями вокруг. Я ссылаюсь на более эффективный C++, пункт 9: «Использовать деструкторы для предотвращения утечек ресурсов»

Идея состоит в том, что если во время очистки выбрано исключение, у вас нет информации о том, что уже есть() нет, и ваше программное обеспечение будет утечки памяти. Если вы используете auto_ptr/scroped_ptr, вам не нужно беспокоиться об этом, так как компилятор сам справится с этим.

Но эта идиома - это C++ - только, C не был разработан с учетом исключений.

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