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


von Arct (Gast)


Lesenswert?

Hi!

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

Was ist daran falsch?

Danke & Grüße
Arct

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


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)


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)


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:
1
discards const qualifier from pointer target type

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

Grüße
Arct

von eProfi (Gast)


Lesenswert?

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

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


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)


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)


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)


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)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.