単一のヘッダー ファイルの #define エントリのみを使用するようにテキスト処理を制限しながら、clang (または gcc) プリプロセッサを使用してコード ベースを前処理するにはどうすればよいですか?
これは一般的に便利です: 現在取り組んでいるいくつかのマクロの即時結果をプレビューしたいと想像してみてください... C に固有のインクルードの山から生じるすべての混乱を避けることができます.
機能の可用性に基づいて、下位互換性のある呼び出しまたは最新の呼び出しを生成するマクロがある場合を想像してみてください。
#if __has_feature(XYZ)
# define JX_FOO(_o) new_foo(_o)
# define JX_BAR(_o) // nop
...
#else
# define JX_FOO(_o) old_foo(_o)
# define JX_BAR(_o) old_bar(_o)
...
#endif
具体的な例は、マクロのコレクションを使用して手動メモリ管理 (非 ARC) から ARC 互換 (自動参照カウント) に移植された Objective-C コードのコレクションです ( https://github.com/JanX2/google -diff-match-patch-Objective-C/blob/master/JXArcCompatibilityMacros.h ) を使用して、後で両方の方法でコンパイルします。
ある時点で、非 ARC サポートをドロップして、読みやすさと保守性を向上させたいと思うでしょう。
編集: プリプロセッサ出力を取得するための基礎は、ここで説明されています: C、Objective-C プリプロセッサ出力
編集 2: Xcode でソースからソースへの変換オプションがどのように実装されているか ([編集] > [リファクタリング] > [変換…]) の詳細を誰かが持っている場合、それは役立つかもしれません。