Können Sie ein Makro mit% u drucken?Drucken von Makrovariablen mit printf in C
#define MAX 10
printf("%u", MAX);
Ist es legal, dies zu tun und zu erwarten, 10 zu bekommen?
Können Sie ein Makro mit% u drucken?Drucken von Makrovariablen mit printf in C
#define MAX 10
printf("%u", MAX);
Ist es legal, dies zu tun und zu erwarten, 10 zu bekommen?
Es gibt keine "Makrovariable". Die Makroerweiterung tritt sehr früh im Kompilierungsprozess auf, bevor es ein echtes Konzept von "Variablen" oder sogar Typen gibt. Es ist eine Textersetzung.
Ihr Code entspricht exakt
printf("%u", 10);
die 10
gedruckt wird.
Es gibt eine leichte Komplikation. Die Konstante 10
ist vom Typ int
, während das Format %u
ein Argument vom Typ unsigned int
erfordert. Es wäre sinnvoller, %d
anstatt %u
zu verwenden. Aber Werte, die vorzeichenbehafteten und vorzeichenlosen Typen entsprechen (wie int
und unsigned int
) sind als Funktionsargumente ziemlich austauschbar, solange der Wert innerhalb des Bereichs von beiden liegt. (printf("%u", -10)
könnte problematisch sein.)
In diesem Fall gibt es kein Problem. Sie können die erwartete Ausgabe erhalten. Warum denkst du, dass es illegal ist? – BLUEPIXY