非常に多くのコンパイル オプションを含む複雑な C コードを使用しています。これにより、コードが非常に読みにくくなります。実際にコンパイルされた方法を反映したコードのコピーを作成したいと思います。最近まで知らなかった「unifdef」ユーティリティを使用して、かなり良い結果が得られました。しかし、なぜ呼び出すのが難しいのか、私は戸惑い、何かが欠けているのではないかと思っています.
次の例を検討してください。
#ifdef A
printf("A\n");
#endif
#ifdef B
printf("B\n");
#endif
「unifdef -DA jump.c」で unifdef を呼び出すと、次のようになります。
printf("A\n");
#ifdef B
printf("B\n");
#endif
B が未定義であることを unifdef に伝えていないため、取り出されませんでした。
unifdef -DA と言うと、代わりに次のようにユーティリティが動作するようにしたいと思います。
printf("A\n");
これは、C プリプロセッサが実際に行っていることと一致します。未定義の分岐はすべて省略されます。
unifdef でこの動作を取得するには、「unifdef -DA -UB jump.c」を使用して、B が未定義であることを明示的に伝える必要があるようです。多分私はそれを呼び出すためのより簡単な方法を逃した.
私が使用しているコードの Makefile から必要な -D フラグと -U フラグの長いリストを生成する Python スクリプトを作成しました (通常、ルーチンごとに 80 個)。そして結果は素晴らしいです。しかし、そのようなスクリプトが実際に必要かどうかは疑問です。
別のユーティリティ (sunifdef? coan?) に、目的の動作が既に組み込まれている可能性もあります。もしそうなら、それについて言及してください。