Forum: Compiler & IDEs AVR-GCC: PSTR(__func__)


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

ich habe gerade mal wieder ein Verständnisproblem mit den Flash-Makros:
1
fprintf_P(stderr,PSTR("hallo"));  // geht
2
fprintf_P(stderr,PSTR(__func__)); // geht nicht
3
fprintf_P(stderr,PSTR(__DATE__)); // geht
4
fprintf_P(stderr,PSTR(__LINE__)); // geht nicht (da Integer)

Was ist am Makro _func_ so besonderes, daß es im Zusammenhang mit 
"PSTR" nicht funktioniert?

Viele Grüße
W.T.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das besondere am Makro __func__ ist, daß es kein Makro ist :-) Es ist 
eine built-in Variable, die je nach Funktion einen anderen Wert hat und 
wie ein static const char[] agiert.  Du wist in PSTR also die gleiche 
Fehlermeldung bekommen wie mit
1
#include <avr/pgmspace.h>
2
3
const char* foo (void)
4
{
5
    static const char func[] = "func";
6
    return PSTR (func);
7
}

D.h. func ist kein gültiger Initializer für das static const char __c[], 
welches PSTR zu initialisieren versucht.

von Walter T. (nicolas)


Lesenswert?

Danke für die Erklärung!

[EDIT:]

Hier standen mal weitere Mutmaßungen, die eigentlich völlig unnötig 
sind.

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.