Ответ 1
Чтобы получить подсветку синтаксиса: Перейдите в Настройки ⇒ Редактор ⇒ Цвета и шрифты ⇒ C/С++ и удалите все тики для "Условно не скомпилированный код". Таким образом, весь код будет отображаться с обычной подсветкой.
В моем проекте есть файл, заключенный в директиву препроцессора ifdef
#ifdef SOME_SYMBOL
... entire file ...
#endif
SOME_SYMBOL определяется другим файлом, который был скомпилирован до этого, и код работает так, как ожидалось, но статический анализатор не знает об этом символе и поэтому обрабатывает SOME_SYMBOL undefined. Весь файл не имеет подсветки синтаксиса, и часть анализа просто пропущена (например, подсветка синтаксиса).
Есть ли способ сказать анализатору обработать этот символ, как он определен, без определения его в CMakeLists.txt?
У меня нет возможности определять SOME_SYMBOL в CMakeLists.txt, так как проект зависит от того, что он undefined на некоторых путях компиляции (изменение этого было бы почти невозможно).
Обновление:
Похоже, что в настоящее время это открытая проблема с JetBrains. См. Проблема CPP-2286
Чтобы получить подсветку синтаксиса: Перейдите в Настройки ⇒ Редактор ⇒ Цвета и шрифты ⇒ C/С++ и удалите все тики для "Условно не скомпилированный код". Таким образом, весь код будет отображаться с обычной подсветкой.
Теперь у Clion есть макрос, который вы можете использовать для обнаружения среды IDE: https://youtrack.jetbrains.com/issue/CPP-1296#comment=27-1846360
#ifdef __JETBRAINS_IDE__
// Stuff that only clion will see goes here
#endif
Это позволяет вам вставлять определения, чтобы заставить клион правильно отображать ваш код в тех случаях, когда он не может быть достаточно умным, чтобы понять его.
Макросъемка __JETBRAINS_IDE__
- это строка версии для IDE. Конкретные версии макроса существуют для разных IDE Jetbrains: __CLION_IDE__
, __STUDIO_IDE__
(для Android Studio) и __APPCODE_IDE__
(для AppCode).
Yay!
Примечание. В момент написания это доступно только в последнем клиенте EAP.
Задача не имеет решения для обычного случая. Но! Вы можете найти целевой и связанный контекст разрешения, где определен SOME_SYMBOL.