我有一个多平台项目,现在在 Windows、Linux 和 iOS 上运行,但我偶然发现了 Objective-C 的一个不良问题。
不幸的exp
是,我为我的一种类型选择了名称(表达式,考虑到我的代码中出现的次数,非常合理),但是 Objective-Cmath.h
默认包含标题,创建名称冲突。
我试图注释掉 .pch 中的所有内容(每个源文件之前默认包含的前缀文件),exp
但仍被标记为重新定义。
有人知道如何在 Objective-C 项目的源文件中不包含 math.h 吗?
我有一个多平台项目,现在在 Windows、Linux 和 iOS 上运行,但我偶然发现了 Objective-C 的一个不良问题。
不幸的exp
是,我为我的一种类型选择了名称(表达式,考虑到我的代码中出现的次数,非常合理),但是 Objective-Cmath.h
默认包含标题,创建名称冲突。
我试图注释掉 .pch 中的所有内容(每个源文件之前默认包含的前缀文件),exp
但仍被标记为重新定义。
有人知道如何在 Objective-C 项目的源文件中不包含 math.h 吗?
Objective-C 没有正式的规范,但它继承了 C 的特性。在 C 中,程序不应使用标准头文件中的标识符,即使它们不包含这些头文件。所以,你不应该使用“exp”作为你自己的标识符。
如果您坚持使用“exp”,您可能可以使用预处理器语句解决该问题:
#define exp MyExp
这将允许您在源代码中编写“exp”,就好像它是您的标识符之一一样。由于预处理器会将其更改为“MyExp”,因此编译器会将“MyExp”视为标识符并且不会抱怨。
这将导致许多问题,例如标识符在目标代码信息和调试工具中显示为“MyExp”,并导致将来无法使用 math.h 中的 exp。