私はこれについて非常に長い間 (実際には何年も) 考え、C++ で例外を処理する最善の方法を探してきました。それで、私に役立つツールを考えたので、このツールが存在するかどうかを尋ねたいと思います(Googleで検索できませんでした)。
このツールは、C++ ソース コード (ヘッダーとソースの両方) を解析し、doxygen のようなコメントを例外情報で埋めます (できれば、メソッド自体について既に書いたコメントを拡張します)。メソッドごとに例外リストがコードから生成されます - 「Throw SomeException;」があるたびに コマンド、呼び出された関数のリストから (再帰に注意してください)、例外をスローする可能性のある既知のコマンドから (現在、演算子 new のみを見つけることができます)。したがって、すべての例外を追跡し、他のモジュールからの例外を管理するのを忘れていないかどうかを確認し、デストラクタから偶発的に例外をスローする可能性があるかどうかを確認できました (AFAIK を禁止しました)。
または、doxygen コメントを自動的に埋めない同様のツールを使用することもできますが、少なくともコメントされていないコメントについては警告します。同様に、doxygen ドキュメント ジェネレーターを実行したときと同様に、1 つの入力変数のコメントを忘れると、ジェネレーターはこれについて警告します。
それで、そのようなツールはありますか?そうでない場合、自分で簡単に実装できるように、C++ コードを解析する非常に使いやすいライブラリはありますか?
例:
//// Example.h ////
/**
* Does almost nothing.
*/
void foo1();
/**
* Generates some error.
*/
void foo2();
//// Example.cpp ////
#include "Example.h"
void foo1()
{
foo2();
}
void foo2()
{
throw MyException();
}
これは次のようになります。
「@throw MyException」行を foo1() コメントに追加します。
警告を与える: 「ファイル内の foo1() ... 行 ...: MyException をスローしますが、コメント内ではスローしません!」
C++ 言語は、スローされる可能性のある例外の仕様の可能性を提供することを知っています。問題は、これがコンパイル時にチェックされるのではなく、実行時にチェックされることです。そして、このケースを処理する必要があります (正しく覚えていれば std::unexpected )。
このツールをコンパイルするたびにではなく、doxygen のように手動で実行する必要がある場合は問題ありません。