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
|