Xcode.m против .mm

В проекте zxing iphone в файле readme указано:

  • Может случиться так, что при попытке создать собственный проект с помощью ZXingWidgetController вы получаете компоновщик ошибки, такие как "undefined ссылка на". Если эта ошибка выглядит как С++ undefined, затем переименование main.m в main.mm(Objective-C ++ исходный суффикс) может решить проблему

Это действительно так. Но мне интересно, почему?

Ответ 1

Расширение

.mm означает Objective-C ++, когда компилятор может обрабатывать классы С++. Но при использовании расширения .m он сможет скомпилировать только C-код без классов С++.

Ответ 2

И .m, и .mm являются расширениями файлов классов исходного кода для приложений на базе Mac. Файлы .m могут содержать классы Objective-C и Objective-С++. Чтобы избежать конфликтов между ними в сценариях смешанного использования, существует соглашение о переименовании всех файлов классов Objective-С++ в .mm. Это помогает компиляторам различать.

Итак, в проекте, который использует Objective-C и Objective-С++, вы увидите:

  • .m файлы, содержащие Objective-C
  • .mm файлы, содержащие Objective-С++