2010-06-25 13 views
26

używam Eclipse do pracy na jakiś kod C i nie indeksuje kodu wewnątrz bloków warunkowych kompilacji tak:Jak mogę uzyskać Eclipse do kodu indeksu wewnątrz #ifdef .... #endif

#ifdef USE_FEATURE_A 
int feature_a(...) { 
    some = code(here); 
} 
#endif 

Jak można uzyskać zaćmienie w celu zindeksowania funkcji feature_a?

+0

Masz na myśli wcięcie? – IntelliChick

+0

indeks, aby działały funkcje takie jak "przeskocz do definicji" i hierarchia połączeń. –

Odpowiedz

27

Można powiedzieć, że zaćmienie zdefiniowano USE_FEATURE_A. Otwórz właściwości projektu i przejdź do strony "C/C++ Ogólne-> Ścieżki i symbole", w zakładce "Symbole" kliknij przycisk "Dodaj" i wstaw USE_FEATURE_A w nazwie feild i kliknij OK.

Uwaga: spowoduje to, że nie będzie on indeksował żadnych stron #else dla elementów preprocesora ... więc jeśli nie wszystkie są podobne do tych, o których mowa, nie można AFAIK, ale jeśli tak, to jesteś dobry. (Eclipse zawiera preprocesor C, którego używa do analizy kodu, wszystkie powyższe czynności są w zasadzie takie same, jak dodanie -DUSE_FEATURE_A do linii poleceń, aby preprocesor Eclipse zachowywał się inaczej niż ten w kompilatorze)

+3

Dziękuję bardzo za to, dosłownie dałeś mi wiele godzin mojego życia! –

+1

Tak, to rozwiązanie, ale dalekie od "przyjazne dla użytkownika". To dla mnie poważny problem. Nie jest praktyczne obejście całego kodu (zwłaszcza kodu od innych) i wyszukiwanie wszystkich symboli, a następnie dodanie ich do właściwości projektu! Nie rozumiem, dlaczego Eclipse nie może mieć pola wyboru, aby umożliwić nam wyłączenie preprocesora do celów indeksowania/odniesienia ... W porównaniu do Visual Slick (którego ja i moi koledzy używaliśmy wcześniej) jest to główna wada Eclipse. (Wersja C/C++). – Rex

+1

Jedynym problemem jest to, że może istnieć kilka definicji tego. Mam na myśli kilka ... – Vetras

1

Za to, co to jest Warto, uzyskanie zaćmienia do parsowania warunkowo skompilowanego kodu jest znacznie trudniejsze niż na pierwszy rzut oka. Znalazłem artykuł od IBM z 2007 roku, w którym powiedzieli, że będą priorytetowo traktować "następne wydanie".

Handling Conditional Compilation in CDT's Core

+0

dzięki za te informacje, to było to, czego szukałem, zasadniczo, appart z odpowiedzi Spudd86, nie ma sposobu, aby uzyskać zaćmienie do obsługi tego kodu. – Vetras

1

miałem ten sam problem, ale kod warunkowo wyeliminowany przez wyprzedzającym był całkowicie poprawny kod C i chciałem go sformatować ... To było moje rozwiązanie:

1) Globalna find/zastąpić z #if do #JUNKif

2) Ctrl-Shift-F formatowanie źródła

3) Kolejny globalny Znajdź/Zamień z #JUNKif do #if

2

To jest łatwiejsze i moim zdaniem bardziej eleganckie rozwiązanie na jeden wybrany jako rozwiązanie:

Jeśli ktoś ma ten sam problem (jak ja), to może (? Teraz) być łatwo rozwiązany przez dzieje do Okno-> Preferencje-> C/C++/Indexer i włącz "Indeksuj wszystkie warianty nagłówków". Następnie kliknij Projekt-> Indeks C/C++ -> przebuduj i wyczyść i zbuduj swój projekt. To powinno rozwiązać cały błąd pochodzący z komend preprocesora.

0

Jednym ze sposobów indeksowania kodu pod flagą w Eclipse (Kepler) c/C++ Editor.

Można włączyć flagi kompilacji w edytorze Eclipse, aby kod pod nimi mógł być indeksowany.

Właściwości> preprocesora Include Paths> Ustawienia użytkownika CDT Wpisy

Click on ADD i dodać Preprocessor Macro i można określić jego wartość.

0

Najlepszym sposobem jest użycie opcji Indexer: Właściwości projektu> C/C++ Ogólne> Indexer. Możesz wybrać Włącz ustawienia specyficzne dla projektu Wolę wybrać "Użyj konfiguracji aktywnej kompilacji", aby wszystkie pliki, które są faktycznie wbudowane w projekt, zostały zaindeksowane. W każdym razie możesz również wybrać indeksowanie wszystkich plików w projekcie, nawet jeśli nie są one zawarte w kompilacji ...

Powiązane problemy