如果启用了模块,则tgmath.h不起作用

我看着使用tgmath.h处理与tgmath.h处理CGFloat typedef float/double乱。

这个答案对如何使用它有一个很好的描述,除了它对我没有任何作用。 不pipe怎样,我的代码仍然在调用math.h函数。

花了一些时间看看所有的项目编译器设置后,我发现禁用“模块”function( @import vs #import – iOS 7 )使这一切工作。 更具体地说,项目设置中的选项称为Apple LLVM 5.1 - Language - Modules下拉菜单中的Enable Modules(C and Objective-C)

要查看此问题的简单示例,请下载使用tgmath的项目( 如MBProgressHUD) ,并查看启用模块项目设置时会发生的情况。 tgmath.h调用被定期的math.h调用取代。

我的问题是:

  1. 为什么模块不能正确导入tgmath?

  2. 有没有办法避开它,并使用tgmath和模块? 我想仍然可以使用它们。

我不确定是什么导致了这个问题,但作为一种解决方法,你至less可以禁用你正在使用tgmath.h文件的模块:

  • 在Xcode中导航到目标的Build Phases选项卡。
  • 在“编译源”阶段下,find源文件。
  • 双击源文件并在Compiler Flagspopup窗口中键入-fno-modules以禁用该文件的Clang模块。

至less这样你在大部分项目中仍然可以获得模块的好处。 (当然,这是假设您在大多数源文件中不需要tgmath.h 。)

它可能已经在你的math库中名为ctgmath: Link