Может ли intellisense быть включен в VS2008 внутри блоков директив препроцессора, таких как #ifndef ... #endif - PullRequest
4 голосов
/ 18 августа 2010

Работая в библиотеках C ++, я заметил, что я не получаю никакой intellisense, когда внутри блоков директив, таких как "#ifndef CLIENT_DLL ... #endif".Это, очевидно, связано с тем, что "CLIENT_DLL" был определен.Я понимаю, что могу обойти это, просто закомментировав директивы.

Существуют ли какие-либо варианты intellisense, которые позволят включить intellisense независимо от оценки директивы?

Ответы [ 5 ]

3 голосов
/ 09 сентября 2010

Получив то, что вы хотите, вы бы много потеряли.

Visual C ++ IntelliSense основан на нескольких основных предположениях 1. что вы хотите хорошие / полезные результаты. 2. что ваш текущий IntelliSense compiland представит информацию, относящуюся к «конфигурации», в которой вы находитесь в данный момент.

Поскольку ваша текущая конфигурация имеет эту директиву препроцессора, вы не сможете получить результаты из области #ifndef.

Причина имеет смысл, если вы обдумаете это. Что если компилятор IntelliSense просто попытался скомпилировать регион, в котором вы находились, независимо от регионов #ifdef? Вы получите бессмысленный и не скомпилированный код. Он не сможет сделать головы или хвосты вашего компиляции.

Я могу представить себе очень сложное решение, в котором он выполняет меньший (новый) анализ для региона, в котором вы находитесь, и предполагается, что только этот регион является частью компиляции. Тем не менее, в этом подходе так много дыр (как будто ничего в этом регионе не объявлено / определено), что этот возможный подход сразу расстроит вас, за исключением очень очень простых сценариев.

Как правило, лучше избегать логики в областях #ifdef и вместо этого делегировать использование параметризованной компиляции целым функциям, так что интерфейс компилятора всегда компилирует эти модули, но компоновщик / оптимизатор выберет исправьте OBJ позже.

Надеюсь, это поможет, Будет

0 голосов
/ 10 сентября 2010

Почему вы хотите сделать это явно в коде? В VS уже есть настройка конфигурации и способ включения и отключения intellisense. см. ссылку.

http://msdn.microsoft.com/en-us/library/ms173379(VS.80).aspx

http://msdn.microsoft.com/en-us/library/ks1ka3t6(v=VS.80).aspx

Эта ссылка может вам помочь.

0 голосов
/ 23 августа 2010

Я просто хотел бы, чтобы Intellisense работал, когда он ДОЛЖЕН в VS2008.MS обходные пути не работают (удаление файлов .ncb) большую часть времени.Ооо, вот еще одно ТАКОЕ обсуждение ... , давайте посмотрим, что ОНА должна сказать (я просто люблю ТАК)

0 голосов
/ 09 сентября 2010

Меня это тоже часто раздражает ... но мне интересно, сможет ли intellisense вообще предоставить какую-либо полезную информацию в рамках условного блока?

Проблема, которую я вижу, заключается в том, что если использование переменной или функции изменяется в зависимости от значения директивы препроцессора, то может измениться и ее определение. Если бы функции просмотра кода, такие как «перейти к определению», были активны в блоке условного вывода, вы бы хотели, чтобы они приводили к определению, включенному в данный момент, или к тому, которое было отключено теми же условиями препроцессора, что и код отключенного кода, который вы просматриваете в

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

0 голосов
/ 18 августа 2010

Visual Studio 6.0 имеет немного лучшую поддержку C ++ в некоторых областях, таких как эта. Если вам нужен intellisense, просто временно закомментируйте его, создайте, и тогда у вас должен быть intellisense. Просто не забудьте порекомендовать его, когда закончите, если это было вашим намерением.

...