Tgmath.h не работает, если модули включены

Я рассмотрел использование tgmath.h для борьбы с беспорядком CGFloat typedef float/double при работе с arm64.

Этот ответ содержит довольно хорошее описание того, как его использовать, за исключением того, что для меня это вообще не сработало. Независимо от того, мой код все еще вызывал функции math.h.

Проведя некоторое время, глядя на все параметры компилятора проекта, я обнаружил, что отключение функции "Модули" (@import vs #import - iOS 7) делает все это работает. Более конкретно, параметр в настройках проекта называется Enable Modules(C and Objective-C) в раскрывающемся списке Apple LLVM 5.1 - Language - Modules.

Чтобы увидеть быстрый пример этой проблемы, загрузите проект, который использует tgmath, например MBProgressHUD, и посмотрите, что произойдет, когда вы включите настройка проекта модулей. Замены tgmath.h заменяются регулярными вызовами math.h.

Мой вопрос:

  • Почему модули не позволяют правильно импортировать tgmath?

  • Есть ли способ обойти это и использовать как tgmath, так и модули? Я бы все еще мог их использовать.

Ответ 1

Я не уверен, что вызывает проблему, но в качестве обходного пути вы могли бы по крайней мере отключить модули только для файлов, в которых вы используете tgmath.h:

  • Перейдите на вкладку "Сборка фаз" в Xcode.
  • На этапе "Источники компиляции" найдите исходные файлы.
  • Дважды щелкните исходный файл и введите -fno-modules во всплывающем списке компиляторов, чтобы отключить модули Clang для этого файла.

По крайней мере, вы все равно получите преимущества модулей в большинстве своих проектов. (Это предполагает, конечно, что вам не нужно tgmath.h в большинстве ваших исходных файлов.)

Ответ 2

Возможно, он уже находится в вашей математической библиотеке под именем ctgmath: Ссылка