XCode .m vs. .mm

32 xcode

在zxing iphone项目中,自述文件指出:

  • 当尝试使用ZXingWidgetController构建自己的项目时,会发生链接器错误,例如"未定义引用".如果此错误看起来像c ++未定义的引用,那么将main.m重命名为main.mm(Objective-C++源后缀)可能会解决问题

确实如此.但我想知道为什么?

Nic*_*sky 64

.mm扩展代表Objective-C++,当编译器可以处理C++类时.但是当使用.m扩展名时,它将只能编译C代码,而不需要C++类.


sch*_*jos 7

.m都是.mm基于 Mac 的应用程序源代码的类文件扩展名。.m文件可以包含Objective-CObjective-C++类。为了避免两者在混合使用场景中发生冲突,约定将所有Objective-C++类文件重命名为.mm. 这有助于编译器区分。

因此,在同时使用Objective-CObjective-C++的项目中,您将看到:

  • .m包含Objective-C的文件
  • .mm包含Objective-C++的文件