Цель C ANTLR3 с исключениями C ++ - PullRequest
1 голос
/ 24 июля 2010

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

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

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

( ANTLR-проценты, около 2009 )

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

1 Ответ

0 голосов
/ 02 августа 2010

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

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

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

...