14 Stimmen

Warum meldet Eclipse CDT: "Syntaxfehler", aber Kompilierung kein Problem

Ich arbeite in bestehendem C-Code, der ein paar Zeilen mit ähnlichen Anweisungen enthält wie diese:

struct collect_conn *tc = (struct collect_conn *) 
     ((char *)c - offsetof(struct collect_conn, runicast_conn));

Die Struktur collect_conn geht folgendermaßen vor:

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 verwende Eclipse CDT, und es markiert die Zeile mit einer orangefarbenen, verschnörkelten Linie als "Syntaxfehler". Ich denke, sie wird vom CDT-Indexer als solcher gekennzeichnet. Die Kompilierung (manuell in einem Terminal) ist jedoch kein Problem.

Dies ist jedoch etwas umständlich, da die Elemente in der Zeile nicht indiziert werden (daher ist der Baum der Aufrufhierarchie nicht immer korrekt, oder die Hervorhebung von Elementen, usw.).

Warum gefällt Ecipse die Linie nicht, wie sie ist?

2voto

peter Punkte 21

Versuchen Sie, den Indexer auf "Full c/C++ indexer (complete parse)" in Preferences->c/C++ -> indexer umzustellen

1voto

Ich habe das gleiche Problem. Es gibt 2 Definition von offsetof (eine für C und eine für C++). IMO das Problem kommen aus, dass

Wenn ich zum Beispiel Folgendes eingebe

#ifndef __cplusplus
#endif

Eclipse wird es grau. Es bedeutet __cplusplus ist definiert, aber mein Projekt ist ein C

Leider habe ich keine Lösung gefunden.

1voto

peter Punkte 11

Ich habe ein ähnliches Problem behoben, nachdem ich die Registerkarte Fehlerparser im Makefile-Projekt im Assistenten für neue CDT-Projekte überprüft und CDT Visual C Error Parser entfernt habe (ich verwende gcc)

1voto

Jeremy List Punkte 1716

Ich habe das Problem folgendermaßen gelöst. Zuerst habe ich die Projekteigenschaften geöffnet, dann die Kategorie C/C++ allgemein->Pfade und Symbole. Unter der Registerkarte "Symbole" fügte ich diesen Eintrag hinzu:

Symbol: offsetof(TYPE,MEMBER)
Value: ((ssize_t) &((TYPE *)0)->MEMBER)

Diese Symbole werden vom Indexer verwendet, aber nicht an den Compiler weitergegeben (zumindest in Makefile-Projekten, ich habe es nicht in anderen C-Projekten ausprobiert), so dass es nicht GCCs eingebautes offsetof

0voto

MBCook Punkte 14110

Ich habe gesehen, dass Eclipse dies einige Male getan hat, und ich benutze es für Java. Normalerweise behebt das Schließen und erneute Öffnen der Datei das Problem für mich (setzt zurück, was auch immer falsch ist). In der Regel scheint es sich um einen Fehler zu handeln, der bereits vorhanden war, aber behoben wurde, und der "Fehler-Cache" wird nicht korrekt aktualisiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X