Stringifizierung #

Wird in einer parametrisierten Makrodefintion einem Parameter ein einzelnes # vorangestellt, bewirkt dies, dass der Parameter nicht einfach mit dem übergebenen Code ersetzt wird, sondern, dass der übergebene Code als String in doppelten Anführungszeichen "" interpretiert wird, weswegen diese Direktive liebevoll als Stringifizierung bezeichnet wird.

#include <stdio.h> #define MESSAGE(x) printf("Variable %s has value %d\n", #x, x) int main(int argc, char** argv){ int i = 5; MESSAGE(i); return 0; }

Variable i has value 5

Details

Nachfolgend zwei Beispiele, wie der Preprozessor die Zeilen übersetzt:

MESSAGE(i); MESSAGE(i+1);

printf("Variable %s has value %d\n", "i", i); printf("Variable %s has value %d\n", "i+1", i+1);