如何使用 clang(或 gcc)预处理器预处理代码库,同时将其文本处理限制为仅使用单个头文件中的 #define 条目?
这通常很有用:假设您想预览您当前正在处理的某些宏的直接结果……而不是由于 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
一个具体的例子是使用宏集合(https://github.com/JanX2/google )从手动内存管理(非 ARC)移植为与 ARC 兼容(自动引用计数)的 Objective-C 代码集合-diff-match-patch-Objective-C/blob/master/JXArcCompatibilityMacros.h),以便之后以两种方式编译。
在某些时候,您希望放弃非 ARC 支持以提高可读性和可维护性。
编辑:这里描述了获取预处理器输出的基础:C,Objective-C 预处理器输出
编辑 2:如果有人详细了解 Xcode 中的源到源转换选项是如何实现的(编辑 > 重构 > 转换为...),那可能会有所帮助。