Я экспериментировал с проектом C ++, используя технику хеширования времени компиляции, которую я нашел здесь . Макросы работают, как и ожидалось, и время компиляции разумное, но 64 рекурсивных макроса, похоже, играют в ад с Intellisense в Visual Studio. После каждого короткого редактирования IDE зависает на ~ 30 секунд. Я подозреваю, что он пытается завершить анализ вложенных макросов. Как только я удаляю строку #include "consthashmacro.h
, отзывчивость возвращается к норме.
Есть ли способ отключить Intellisense для определенного заголовочного файла?
Я нашел эту статью под названием "Управление IntelliSense с помощью макросов" , но решение там, похоже, не работает правильно и для меня.
Возможно, это не IntelliSense? Это определенно связано с этим заголовком. Есть идеи?
EDIT:
Я попытался полностью отключить 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
на строку включения под ним, производительность замедляется до ползунка.