【发布时间】:2013-08-06 10:00:54
【问题描述】:
如何使用 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-diff-match-patch-Objective-C/blob/master/JXArcCompatibilityMacros.h) 从手动内存管理(非 ARC)移植为与 ARC 兼容(自动引用计数)的 Objective-C 代码集合,以便编译之后的两种方式。
在某些时候,您希望放弃非 ARC 支持以提高可读性和可维护性。
编辑:这里描述了获取预处理器输出的基础:C, Objective-C preprocessor output
编辑 2:如果有人详细了解 Xcode 中的源到源转换选项是如何实现的(编辑 > 重构 > 转换为...),那可能会有所帮助。
【问题讨论】:
标签: objective-c c gcc macros clang