理論的にヒットできないコードパスを直接攻撃することによってgcovをシャットダウンするためだけに存在する、関連する関数の単体テストを紹介できますか?それらは単体テストであるため、状況の「不可能性」を無視する可能性があります。呼び出されない関数を呼び出したり、無効な列挙値を渡してデフォルトのブランチをキャッチしたりする可能性があります。
次に、NDEBUGでコンパイルされたバージョンのコードでのみこれらのテストを実行するか、テストフレームワークがサポートするものを問わず、アサートがトリガーされることをテストするハーネスでテストを実行します。
コードの機能要件を含む仕様ではなく、コードがそこになければならないと仕様が言うのは少し奇妙だと思います。特に、それはあなたのテストがそれらの要件をテストしていないことを意味します。これは要件を機能的に保つための理由と同じくらい良い理由です。assert
個人的には、「無効な列挙値で呼び出された場合、関数は失敗します。呼び出し元は、リリースモードで無効な列挙値で関数を呼び出さない」ように仕様を変更したいと思います。またはそのようなもの。
おそらく現在それが言っていることは、「すべてのswitchステートメントはデフォルトのケースを持たなければならない」という線に沿っています。しかし、それは、コーディング標準がデッドコードを導入することによって観察可能な動作(少なくともgcovで観察可能)を妨害していることを意味します。コーディング標準はそれを行うべきではないので、機能仕様は可能であればコーディング標準を考慮に入れるべきです。
それができない場合は、ヒットできないコードをでラップし、#if !GCOV_BUILD
gcovの利益のために別のビルドを実行することができます。このビルドはいくつかの要件に失敗しますが、コードの分析が正しいことを条件として、テストスイートが他のすべてをテストすることを望む自信を与えます。
編集:あなたは危険なコードジェネレーターを使用していると言いますが、ソースコードに注釈を付けることによって解決策も求めています。ソースを変更する場合、多くの場合、デッドコードを削除できますか?生成されたソースを変更することが理想的ではありませんが、ニーズは...