Zeichen-Operator #@

Wird in einer parametrisierten Makrodefinition einem Makro-Parameter die Zeichenfolge #@ vorangestellt, bewirkt dies, dass der Makro-Parameter nicht einfach mit dem übergebenen Argument ersetzt wird, sondern, dass der übergebene Code als Character in einfachen Anführungszeichen '' interpretiert wird, weswegen dieser Makro-Operator auch liebevoll als Buchstabisierer oder auf Englisch als Charizer bezeichnet wird. Dieser Makro-Operator ist jedoch nicht auf jedem System verfügbar.






i: 5
#include <stdio.h>
#define MESSAGE(x) printf("%c: %d\n", #@x, x)

int main(){
  int i = 5;
  MESSAGE(i);
  return 0;
}

Details

Auf dem System des Autors ist die Buchstabisierung nicht in den Compiler eingebaut. Nachfolgend jedoch trotzdem die Zeile, wie der Preprozessor sie übersetzen würde:

printf("%c: %d\n", 'i', i);
MESSAGE(i);

Es ist zu beachten, dass die Zeichenfolge #@ einen Makro-Operator darstellt, sprich eine Verknüpfung von Makro-Operanden. In diesem Falle handelt es sich um einen unären Makro-Operator, der einen Operanden rechts erwartet. Als Operanden sind bei der Buchstabisierung explizit nur Makro-Parameter gültig. Wird versucht, dieser Makro-Operator anderweitig im Code zu verwenden, so wird der Compiler einen Fehler melden.