Wie kann ich Eclipse dazu bringen, Code innerhalb von #ifdef zu indizieren …. #endif

Lesezeit: 4 Minuten

Ich verwende Eclipse, um an C-Code zu arbeiten, und es wird kein Code in bedingten Kompilierungsblöcken wie diesem indiziert:

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

Wie kann ich Eclipse dazu bringen, die Funktion feature_a zu indizieren?

  • Index, damit Funktionen wie “Zur Definition springen” und Aufrufhierarchie funktionieren.

    – Arthur Ulfeldt

    28. Juni 2010 um 20:30 Uhr

Das könnte man Eclipse sagen USE_FEATURE_A ist definiert. Öffnen Sie Ihre Projekteigenschaften und gehen Sie zur Seite “C/C++ Allgemein->Pfade und Symbole”, klicken Sie unter der Registerkarte “Symbole” auf die Schaltfläche “Hinzufügen” und legen Sie sie ab USE_FEATURE_A in das Namensfeld und klicken Sie auf OK.

Hinweis: Dies führt dazu, dass keine indiziert werden #else Seiten zu Ihrem Präprozessor-Zeug … also, wenn sie nicht alle wie die fragliche sind, können Sie nicht AFAIK, aber wenn sie es sind, sind Sie gut. (Eclipse enthält einen C-Präprozessor, den es verwendet, um Ihren Code zu analysieren. Alle oben genannten Dinge sind im Wesentlichen dasselbe wie das Hinzufügen von -DUSE_FEATURE_A zu Ihrer Befehlszeile, sodass sich der Präprozessor von Eclipse anders verhält als der in Ihrem Compiler.)

  • Vielen Dank dafür, Sie haben mir buchstäblich nur Stunden meines Lebens zurückgegeben!

    – Arthur Ulfeldt

    5. August 2010 um 19:11 Uhr

  • Ja, das ist eine Lösung, aber alles andere als “benutzerfreundlich”. Das ist ein großes Problem für mich. Es ist nicht praktikabel, den gesamten Code zu umgehen (insbesondere für Code von anderen) und nach allen Symbolen zu suchen und sie dann zu den Projekteigenschaften hinzuzufügen! Ich verstehe nicht, warum Eclipse kein Kontrollkästchen haben kann, mit dem wir den Präprozessor für Indizierungs-/Referenzzwecke deaktivieren können … Im Vergleich zu Visual Slick (das ich und meine Kollegen zuvor verwendet haben) ist dies ein großer Nachteil von Eclipse. (C/C++-Version).

    – Rex

    7. Dezember 2012 um 11:45 Uhr

  • Das einzige Problem ist, dass es dafür mehrere Definitionen geben kann. ich meine mehrere…

    – Vetras

    28. Februar 2013 um 11:30 Uhr

  • auch auf der Eclipse-Website help.eclipse.org/juno/…

    – Oleg Waschnew

    24. September 2014 um 9:07 Uhr

  • Hinweis: Wenn Sie mehrere Build-Konfigurationen verwenden und Eclipse sich nicht wie erwartet verhält, gehen Sie zu C/C++ General->Indexer und stellen Sie sicher, dass „Build-Konfiguration für den Indexer“ auf „Aktive Build-Konfiguration verwenden“ eingestellt ist, falls gewünscht. oder Sie können es auf eine bestimmte feste Konfigurationsoption zwingen.

    – Digikrat

    5. April 2017 um 20:56 Uhr

Dies ist eine einfachere und meiner Meinung nach elegantere Lösung als die als Lösung ausgewählte:

Wenn jemand das gleiche Problem hat (wie ich), kann dies (jetzt?) leicht gelöst werden, indem er zu geht Fenster->Einstellungen->C/C++/Indexer und “Alle Header-Varianten indizieren” aktivieren. Dann klick Projekt->C/C++ Indexer->Neu erstellen und sauber und bauen dein Projekt. Dies sollte alle Fehler beheben, die von Präprozessorbefehlen stammen.

  • Dies hilft nicht beim bedingten Kompilieren. Codeblöcke in #else sind immer noch ausgegraut.

    – Manas

    7. Januar 2019 um 3:30 Uhr

Für das, was es wert ist, ist es viel schwieriger, Eclipse dazu zu bringen, bedingt kompilierten Code zu parsen, als es auf den ersten Blick scheint. Ich habe ein Papier von IBM aus dem Jahr 2007 gefunden, in dem sie sagten, dass sie für die “nächste Version” Prioritäten setzen werden.

Umgang mit bedingter Kompilierung im Kern von CDT

  • Danke für diese Informationen. es war, was ich suchte. Abgesehen von der Spudd86-Antwort gibt es im Grunde keine Möglichkeit, Eclipse dazu zu bringen, diesen Code zu verarbeiten.

    – Vetras

    28. Februar 2013 um 11:31 Uhr


Ich hatte das gleiche Problem, aber der Code, der durch die Vorverarbeitung bedingt eliminiert wurde, war vollkommen gültiger C-Code und ich wollte, dass er formatiert wurde … Dies war meine Lösung:

1) Globales Suchen/Ersetzen von #if bis #JUNKif

2) Strg-Umschalt-F, um die Quelle neu zu formatieren

3) Ein weiteres globales Suchen/Ersetzen von #JUNKif zu #if

Benutzer-Avatar
Akshaypmurgod

Eine Möglichkeit, Code unter dem Flag in Eclipse (Kepler) c/c++Editor zu indizieren.

Sie können die Kompilierungs-Flags im Eclipse-Editor aktivieren, damit Code darunter indiziert werden kann.

Eigenschaften > Präprozessor-Include-Pfade > Einträge für CDT-Benutzereinstellungen

Klicke auf HINZUFÜGEN und fügen Sie das Präprozessor-Makro hinzu und Sie können seinen Wert angeben.

Benutzer-Avatar
Binay Kumar Pradhan

Der beste Weg, denke ich, ist die Verwendung der Indexer-Option: Projekteigenschaften>C/C++ Allgemein>Indexer. Sie können Projektspezifische Einstellungen aktivieren auswählen. Ich bevorzuge die Auswahl “Aktive Build-Konfiguration verwenden”, damit alle Dateien, die tatsächlich im Projekt erstellt werden, indiziert werden. Auf jeden Fall können Sie auch alle Dateien im Projekt indizieren, auch wenn sie nicht im Build enthalten sind …

1371170cookie-checkWie kann ich Eclipse dazu bringen, Code innerhalb von #ifdef zu indizieren …. #endif

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy