Что заставляет этот заголовочный файл замедлять сканирование VS2005? (IntelliSense реабилитирован?)

Я экспериментировал с проектом C ++, используя технику хеширования времени компиляции, которую я нашел здесь . Макросы работают так, как ожидалось, и время компиляции приемлемое, но 64 рекурсивных макроса, похоже, не справляются с Visual Studio Intellisense. После каждого короткого редактирования IDE зависает примерно на 30 секунд. Я подозреваю, что он заводится, пытаясь разобрать вложенные макросы. Как только я удаляю строку #include "consthashmacro.h , скорость отклика возвращается к норме.

Есть ли способ отключить Intellisense для определенного файла заголовка?

Я нашел эту статью под названием «Управление IntelliSense с помощью макросов» , но решение там, похоже, у меня тоже работает некорректно.

Возможно, дело не в intelliSense? Это определенно связано с этим заголовком. Есть идеи?

РЕДАКТИРОВАТЬ:
Я попытался полностью отключить Intellisense, переименовав feacp.dll в соответствии с рекомендациями . У меня такое же поведение - при редактировании IDE зависает на длительное время. Удаление заголовка восстанавливает производительность. Какая еще функция из VS2055 может вызывать эту невероятную задержку?

Для воспроизведения:
Используя Visual Studio 2005, создайте новое «Консольное приложение Win32» с настройками по умолчанию (то есть: с использованием предварительно скомпилированных заголовков). Добавьте следующий код в cpp файл. (Извлеките 'consthashmacro.h' в исходный каталог (доступен из zip-файл на сайте Криса Савойя)

#include "stdafx.h"

#define CONSTHASH(s) ((s)[0])
//#include "consthashmacro.h"

void Send(long hash, long value)
{
   printf("Sending %x %x\n", hash, value);
}

#define QQuot_(x) #x
#define QQuote(x) QQuot_(x)
#define Debug_Print(s, v) (Send( CONSTHASH(QQuote(__LINE__)##s), *((long*)&(v))))
int _tmain(int argc, _TCHAR* argv[])
{
       int i = __LINE__;
       float f= 3.14f;
       Debug_Print("This is a test %d", i);

       i++;
       Debug_Print("This is a test %d", i);
       Debug_Print("This was test %f", f);

    return 0;
}

Когда я заменяю #define CONSTHASH строкой include под ним, производительность снижается до ползания.

11
задан AShelly 30 September 2013 в 19:28
поделиться