Eksperymentowałem z projektem C++ przy użyciu Compile Time Hashing technique I found here. Makra działają zgodnie z oczekiwaniami, a czas kompilacji jest rozsądny, ale 64 makra rekursywne wydają się grać w piekło za pomocą IntelliSense. Po każdej krótkiej edycji IDE zawiesza się na ~ 30 sekund. Podejrzewam, że robi się zraniony, próbując przeanalizować zagnieżdżone makra. Jak tylko usuniemy linię #include "consthashmacro.h
, reakcja powróci do normy.Co sprawia, że plik nagłówkowy spowalnia VS2005 do indeksowania? (Uwalniany IntelliSense?)
Czy istnieje sposób wyłączenia IntelliSense dla określonego pliku nagłówkowego?
Znalazłem ten artykuł pod tytułem "Controlling IntelliSense Through Macros", ale rozwiązanie tam również nie działa poprawnie.
Być może to nie jest intelliSense? Jest to zdecydowanie związane z tym nagłówkiem. Jakieś pomysły?
EDIT:
Próbowałem wyłączenie Intellisense całości renaming the feacp.dll as recommended. Mam takie samo zachowanie - edycje powodują, że IDE będzie zawieszony na długi czas. Usunięcie nagłówka przywraca wydajność. Jaka inna cecha VS2055 może powodować to niesamowite opóźnienie?
Do odtworzenia:
Korzystanie z Visual Studio 2005, Utwórz nowy "Win32 Console Application" z ustawieniami domyślnymi (czyli: przy użyciu nagłówków skompilowane). Dodaj następujący kod do pliku cpp. (Fragment „consthashmacro.h” do katalogu źródłowego (dostępnego od zip file w miejscu Chris Sabaudii)
#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;
}
Kiedy wymienić #define CONSTHASH
z linią zawierać pod nim, wydajność zwalnia do indeksowania.
Czy projekt wykorzystuje prekompilowany nagłówek? Może mógłbyś spróbować umieścić w nim ten nagłówek. – Praetorian
Dobry pomysł, ale (5 minut czekania później ...) to nie zadziałało. – AShelly
W VS2010 'Narzędzia> Opcje> Edytor tekstu> C/C++> Zaawansowane' Widzę opcje wyłączania IntelliSense i takie, nie są dostępne w VS2005? – nobody