XCode .m против.mm

В проекте zxing iphone файл readme гласит:

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

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

1 ответ

Решение

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

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

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

  • .mфайлы, содержащие Objective-C
  • .mmфайлы, содержащие Objective-C++
Другие вопросы по тегам