2017-08-25 4 views
-1

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?

+1

In diesem Fall gibt es kein Problem. Sie können die erwartete Ausgabe erhalten. Warum denkst du, dass es illegal ist? – BLUEPIXY

Antwort

5

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.)