Forum: PC-Programmierung Kompiler note bei Makro - Was ist falsch?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Arct (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi!

Beim Kompilieren mit gcc bekomme ich folgende Meldung:
errorcodes.h:175:74: note: in definition of macro DO_IF_ERROR
 #define DO_IF_ERROR(resultCode)                         if(RESULT_OK > (resultCode))
                                                                         ^~~~~~~~~~

Was ist daran falsch?

Danke & Grüße
Arct

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Arct schrieb:
> Was ist daran falsch?

Du musst schon die vorangehende Fehlermeldung und den zugehörigen Code 
mit posten, nicht nur die Makro-Definition.

von Programmierer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der Code vor oder nach dem Makro-Aufruf oder der übergebene Parameter 
sind falsch. Mehr kann man bei der Informationslage nicht sagen.

von Arct (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke für die schnellen Antworten!

Die Meldungen davor und danach hatten in keinster Weise etwas mit diesem 
Error zu tun, da ging es um const-Qualifier, die verloren gingen:
discards const qualifier from pointer target type

Habe testweise die Klammern um resultCode entfernt. Seitdem bliebt die 
Meldung aus.
#define DO_IF_ERROR(resultCode)                         if(RESULT_OK > resultCode)

Grüße
Arct

von eProfi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dann stimmt beim resultCode etwas nicht. Die Klammer würde ich 
drinlassen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
eProfi schrieb:
> Die Klammer würde ich
> drinlassen.

Auf jeden Fall! Makroargumente sollten im Makro immer geklammert werden, 
wenn das syntaktisch möglich ist, ansonsten können da bei unbedarfter 
Verwendung seltsame Dinge passieren.

Arct schrieb:
> Die Meldungen davor und danach hatten in keinster Weise etwas mit diesem
> Error zu tun

Doch, haben sie. Deshalb steht doch da "in definition of macro …".

Wenn du nicht gewillst bist, uns ein Stückchen mehr vom "rundrum" zu 
zeigen, wird dir wohl keiner helfen können.

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Arct schrieb:
> Die Meldungen davor und danach hatten in keinster Weise etwas mit diesem
> Error zu tun, da ging es um const-Qualifier, die verloren gingen:

Meldungen des Compilers, die so anfangen:

„note:“

sind keine Fehlermeldungen, sondern eine erklärende Ergänzung für die 
direkt davor stehende eigentliche (Fehler-)meldung.

Oliver

: Bearbeitet durch User
von Programmierer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Arct schrieb:
> Habe testweise die Klammern um resultCode entfernt. Seitdem bliebt die
> Meldung aus.

Dann macht dein Code jetzt wahrscheinlich was völlig anderes als 
gewünscht.

Arct schrieb:
> Die Meldungen davor und danach hatten in keinster Weise etwas mit diesem
> Error zu tun

Das kann nicht sein. Du hast eine halbe Fehlermeldung gepostet. Die 
taucht nicht einfach so halb auf, da gehört noch was zu.

Arct schrieb:
> Die Meldungen davor und danach hatten in keinster Weise etwas mit diesem
> Error zu tun, da ging es um const-Qualifier, die verloren gingen:

Vielleicht passierte dieser Fehler ja im Makro-Argument?! Dann ändern 
die Klammern aber nichts. Oder hast du den "const"-Fehler behoben und 
gleichzeitig die Klammern entfernt?

Die Klammern solltest du sowieso wieder einfügen.

von Arct (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ja, ihr habt offensichtlich recht! Habe die Klammern wieder hinzugefügt 
und es geht. Die Meldung bezog sich dann wirklich auf den Fehler davor, 
mit dem const-Qualifier, denn DO_IF_ERROR wurde mit eben dieser Funktion 
aufgerufen, also DO_IF_ERROR(funktion(x,y,z)) { ...}

Dake & Grüße
Arct

von Arct (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich hatte ja die const-Qualifier und die Klammern zeitgleich entfernt ;)
Beim nächsten mal also liebe eine Änderung nach der anderen. :-D

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.