math.h默认包含在Objective-C中

xix*_*xao 3 objective-c include

我有一个目前在Windows,Linux和iOS上运行的多平台项目,但是我偶然发现了Objective-C的不良问题。

不幸exp的是,我为我的一种类型选择了名称(表达式,考虑到我的代码中出现的次数,这是相当合理的),但是Objective-C math.h默认情况下以某种方式包含了标题,从而产生了名称冲突。

我试图注释掉.pch(默认在每个源文件之前包含的前缀文件)中的所有内容,并且exp仍标记为重定义。

有人知道如何在Objective-C项目的源文件中包含math.h吗?

Eri*_*hil 5

Objective-C没有正式的规范,但是它继承自C的功能。在C中,程序不应使用标准标头中的标识符,即使它们不包含这些标头也是如此。因此,您不应将“ exp”用作自己的标识符。

如果您坚持使用“ exp”,则可以使用预处理程序语句解决该问题:

#define exp MyExp
Run Code Online (Sandbox Code Playgroud)

这样,您就可以在源代码中编写“ exp”,就好像它是标识符之一一样。由于预处理器会将其更改为“ MyExp”,因此编译器将看到“ MyExp”作为标识符,并且不会抱怨。

这将导致许多问题,例如标识符在目标代码信息和调试工具中显示为“ MyExp”,并导致将来无法使用math.h中的exp。

  • 然后,您可以考虑使用一个名称来解释发生了什么,例如,#define exp ThisIs_exp_InTheSourceCodeButRenamedByPreprocessorDefineToWorkAroundConflictWithReservedSymbol`,以便在调试时看到它的任何人都可以理解它的含义。 (2认同)