vs 2008 препроцессор определяет true, но код по-прежнему неактивен

Пример кода

#if (COMPUTER_NUMBER == PRIMARY_COMPUTER)
if (platformType == NAV_BASESTATION) {
    nav->once(cycleno);      
    controller->once(cycleno);      

и т. д. Все, что находится ниже #if, выделено серым цветом. У меня есть большая база кода, состоящая из многих макросов такого типа. Код имеет несколько версий в зависимости от цели, управляемой несколькими ключевыми параметрами, подобными этому. Несмотря на то, что макрос определен в настройках проекта, и несмотря на мои попытки установить его в файле кода для обнаружения intellisense, и несмотря на мой сброс настроек vs для запуска нового сканирования intellisense, блок кода отображается серым цветом и не может пройти через intellisense. Я загрузил пробную версию визуального помощника и пытаюсь посмотреть, подойдет ли он.

Я попытался добавить #define COMPUTER_NUMBER = PRIMARY_COMPUTER прямо над такими строками кода, как вставлено выше, и сохранить, закрыть и снова открыть vs в надежде инициировать новое сканирование intellisense, но, похоже, ничего не происходит. Я даже могу использовать intellisense для имени макроса после этого и сказать «перейти к определению», что приводит меня к тому, где я определил макрос как это значение, но это упрямый зверь, как мы все знаем. Что-нибудь, что я должен попробовать или уточнить?

Спасибо


person Joshua    schedule 30.08.2011    source источник


Ответы (2)


Это не решение проблемы с препроцессором, но вы можете просто отключить выделенную серым цветом функцию кода. Снимите флажок Tools | Options | Text Editor | C/C++ | Formatting | Colorize inactive code blocks in a different color

person sean e    schedule 03.09.2011
comment
Спасибо, это мне очень помогло. Я думал, что это ошибка Visual Assist. - person Dmitriy; 10.05.2012

Я знаю, что это старо, но у меня все еще была проблема. У меня был проект, в котором был определен препроцессор «BLUETOOTH», но в исходном файле весь раздел был выделен серым цветом. Он по-прежнему строился как надо, но это раздражало, потому что его было трудно читать, и ни один из регионов #pragma не работал, поэтому я не мог привести его в обведенную форму.

Единственный способ обойти это — зайти в свойства проекта, удалить препроцессор BLUETOOTH, нажать «Применить», а затем добавить его обратно и нажать «Применить». А затем всему этому серому тексту вернули нормальные цвета.

Поскольку это похоже на ошибку, я не знаю, насколько хорошо этот подход решит проблемы других людей, о которых я видел сообщения об этой проблеме, но это сработало для меня.

Более серьезная проблема для меня заключается в том, что intellisense НЕ работал в выделенном серым текстом (он действовал как неактивный), но компиляция правильно построила выделенный серым код.

person Brian Reinhold    schedule 08.06.2012