Warum macht Eclipse CDT sagen: 'syntax-Fehler', aber die Zusammenstellung kein problem
Ich arbeite in bestehenden C-code, die hat ein paar Zeilen mit Aussagen wie diese:
struct collect_conn *tc = (struct collect_conn *)
((char *)c - offsetof(struct collect_conn, runicast_conn));
Struct collect_conn geht entlang der folgenden Linien:
struct collect_conn {
struct runicast_conn runicast_conn;
struct announcement announcement;
const struct collect_callbacks *cb;
struct ctimer t;
uint16_t rtmetric;
uint8_t forwarding;
uint8_t seqno;
};
Ich bin mit Eclipse CDT, und er markiert die Zeile, die mit einem orange schnörkellinie als 'syntax error'. Ich denke, es ist, als solcher gekennzeichnet durch den CDT-indexer.
Allerdings Zusammenstellung (manuell in ein terminal) ist kein problem.
Dies ist ein bisschen unbequem aber, da die Elemente auf der Linie nicht bekommen, indiziert (also der Aufruf-Hierarchie-Baum nicht immer korrekt, oder die Hervorhebung der Elemente, etc.)
Warum Ecipse nicht, wie die Linie, wie es ist?
InformationsquelleAutor der Frage Rabarberski | 2009-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eclipse CDT enthält seinen eigenen Präprozessor/parser zum analysieren von code und den Aufbau eines index. Allerdings, wenn man sich auf eine build-CDT ruft aus, um Ihre system-compiler, wie gcc zum Beispiel. Möglicherweise gibt es geringfügige Unterschiede zwischen der syntax akzeptiert, die von der CDT-parser die syntax akzeptiert, die von Ihrem compiler. Wenn dies geschieht, das CDT-parser kann verwirrt werden.
Auf meinem system die
offsetof
makro expandiert zu einem Ausdruck, der verwendet die__offsetof__
Schlüsselwort. Dieses Schlüsselwort wird nicht erkannt, durch CDT, so dass ist, warum es gibt einen syntax Fehler. Um mit diesem problem umzugehen der CDT-parser hat ein makro gebaut, um deal mit__offsetof__
die wie folgt aussieht:Diese scheint nicht korrekt zu sein, zumindest auf meinem system-das Ergebnis ist die Entfernung von der
__offsetof__
Schlüsselwort aus der Quelle, die immer noch zu einem Syntaxfehler führt.War ich in der Lage, um loszuwerden, die syntax-Fehler, indem du die Pfade und Symbole Eigenschaft Seite und das hinzufügen eines Makros für
__offsetof__
die Karten 'foo'. Diese tricks der parser in das denken es ist nur ein Aufruf einer Funktion, die es noch nicht gesehen, aber nicht einen syntax-Fehler.Alternativ können Sie ausschalten syntax error reporting in den editor, indem Sie Fenster > Einstellungen > allgemein > Redaktion > Text-Editoren > Anmerkungen und deaktivieren alle Kontrollkästchen für C/C++ - Indexer-Marker.
InformationsquelleAutor der Antwort Mike Kucera
Habe ich problem in eclipse CDT mit Einstellungen->C/C++->Language-Mappings : Hinzufügen
Content-Type : C-header
Sprache : C++
InformationsquelleAutor der Antwort ra.
Scheint es das CDT-parser nicht wie das Teil offsetof(struct,...).
Wenn Sie erklären collect_conn mit einem typedef-der Fehler geht Weg. Zumindest für mich, der folgende code funktioniert:
Wenn Sie nicht ändern Sie die ursprüngliche Erklärung etwas wie das hier tun:
InformationsquelleAutor der Antwort jassuncao
Es verwechselt werden könnte, prüfen Sie, ob Sie eine definition von
offsetof
im Gültigkeitsbereich, zum Beispiel. Sonst könnte man versuchen die Vereinfachung des Ausdrucks, bricht es mit z.B. einem#define
mit deroffset
oder so etwas.Ich denke, der compiler könnte eine integrierte version von
offsetof
während die Finsternisse des compiler/code-parser möglicherweise nicht. Wenn ja, würden Sie brauchen, um stellen Sie sicher, dass die definition, die für Eclipse, um der Lage, richtig zu analysieren Ihren code.InformationsquelleAutor der Antwort unwind
schalten Sie den indexer, um "Full c/C++ - indexer (vollständige parse)" in den Einstellungen->c/C++ -> indexer
InformationsquelleAutor der Antwort peter
Iv hat das gleiche problem. Es gibt 2 definition der offsetof (eine für C und eine für C++). IMO das problem kommt aus, dass
Zum Beispiel, wenn ich Schreibe
Eclipse grey. Es bedeutet __cplusplus definiert ist, aber mein Projekt ist ein C
Leider kann ich nicht eine Lösung finden.
InformationsquelleAutor der Antwort
Ich behoben ähnliches problem nach der überprüfung der Registerkarte Fehler-Parser in der Datei Makefile-Projekt in New CDT Project Wizard entfernen CDT, Visual C Parser-Fehler (ich verwende gcc)
InformationsquelleAutor der Antwort peter
Landete ich auf die Lösung des Problems wie dieses. Zuerst öffnete ich die Projekt-Eigenschaften, dann den C/C++ general->Pfade und Symbole Kategorie. Unter der Registerkarte Symbole Hinzugefügt habe ich diesen Eintrag:
Diese Symbole verwendet werden, durch die der indexer aber nicht an den compiler übergeben werden (zumindest in Makefile-Projekte, ich habe nicht versucht es auf die andere Art der C-Projekt), so dass es nicht überschreiben GCC built-in offsetof
InformationsquelleAutor der Antwort Jeremy List
Manchmal, obwohl der code kompiliert ohne Fehler, eclipse CDT die Echtzeit-code-analyzer zeigt einige Fehler in C/C++ - Dateien (zB. 'Funktion xxx konnte nicht aufgelöst werden). Dies ist, weil eclipse CDT benutzt seinen eigenen Präprozessor/parser für die Analyse der code und der Aufbau der Indizes statt der MinGW ist eine (oder jedem anderen GNU-compiler). Um dieses Problem zu beheben, die Global für alle eclipse-Projekte in den Arbeitsbereich, gehen Sie folgendermaßen vor:
(Um dieses Problem zu beheben, die nur für ein bestimmtes Projekt, führen Sie die Schritte 1, 2 und 4 in das Menü 'Projekt->Einstellungen')
1-Im Menü 'Fenster->Einstellungen->C/C++->Language-Mappings', fügen Sie die richtigen Zuordnungen, wie gezeigt, unten an: (zB. für Inhalts-Typen: - C++ - Quellcode/Header-Datei, die GNU-C++ - Sprache und so weiter)
Global Language Mappings Einstellungen
2-In-Menü 'Fenster->Einstellungen->C/C++->Indexer', die vollständige Indizierung, indem alle Checkboxen (aber nicht 'Überspringen'), wie gezeigt, unten an:
Globale Indexer Einstellungen
3-In jedes Projekt die spezifischen Eigenschaften Menü " Projekt->Eigenschaften->C/C++ general->Indexer', Deaktivieren Sie "Enable project specific settings', wie gezeigt, unten an:
Projekt-Indexer-Einstellungen
4-neu erstellen die Indizierung Menü " Projekt->C/C++, Index->Rebuild'.
InformationsquelleAutor der Antwort Hossein
Ich habe gesehen, Eclipse tun Sie dies einige Male, und ich benutze es für Java. In der Regel schließen und öffnen Sie erneut, die Datei behebt es für mich (setzt, was falsch ist). Es in der Regel scheint zu sein, dass ein Fehler WAR da, aber wurde behoben und das "Fehler-cache" nicht korrekt aktualisiert.
InformationsquelleAutor der Antwort MBCook