gpt4 book ai didi

objective-c - 如何限制使用的预处理定义的范围?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:13 24 4
gpt4 key购买 nike

如何使用 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 中实现源到源转换选项(编辑 > 重构 > 转换为...),那可能会有所帮助。

最佳答案

如果您是从头开始编写文件或所有包含文件都在一个地方,为什么不将它们包装在:

#ifndef MACRO_DEBUG
#include "someLib.h"
/* ... */
#endif

但正如我所提到的,这仅在包含在连续行中时有效,并且在最好的情况下,您开始自己从头开始编写文件,因此您不必去寻找包含。

关于objective-c - 如何限制使用的预处理定义的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18077020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com