12.5 Ersetzung eines Makroparameters durch einen String 
        
Ist in einem Ersetzungstext vor dem Parameter das Zeichen # gesetzt, werden beim Aufruf des Makros das # und der Parameter durch den entsprechenden String ersetzt: 
#define ausgabe(variable) printf(#variable"=%d\n",variable) 
Hier wird der Variablen zahl der Wert 10 (int Zahl=10;) übergeben. Steht im Programm beispielsweise 
ausgabe(Zahl); 
dann wandelt dies der Präprozessor zunächst um in 
printf("Zahl"" = %d\n", Zahl);
Tatsächlich verhält sich der Ausdruck so, als würde Folgendes in der Zeile stehen: 
printf("Zahl = %d\n");
Hierzu ein kleines Programmbeispiel, in dem diese Technik verwendet wird: 
/* replace_makrparam.c */
#include <stdio.h>
#include <stdlib.h>
/* Bei Linux muss für math.h der Compilerflag -lm
 * mit angegeben werden:
 * gcc -o strkont strkont.c -lm
 */
#include <math.h>
#define wurzel(zahl)\
   printf(#zahl" von %f = %f\n",zahl,sqrt(zahl))
#define summe(zahl1,zahl2)\
   printf(#zahl1 "+" #zahl2 " = %d\n",zahl1+zahl2)
#define gibaus(string)\
   printf(#string"\n")
#define wertvon(zahl,format)\
   printf(#zahl" = "format"\n",zahl)
int main(void) {
   float Wurzel;
   int Wert1 = 100, Wert2 = 150, integer = 20;
   char character = 's';
   float floating = 5.550f;
   printf("Zahl eingeben : ");
   scanf("%f",&Wurzel);
   wurzel(Wurzel);
   summe(Wert1,Wert2);
   gibaus(Hallo Welt);
   wertvon(character,"%c");
   wertvon(integer,"%d");
   wertvon(floating,"%f");
   return EXIT_SUCCESS;
}
  Hier klicken, um das Bild zu Vergrößern 
Abbildung 12.4   
    Ersetzung eines Makroparameters durch einen String 
 |