Geschrieben von schmoelz am 03.08.2004, 17:11

In diesem Tut möchte ich euch das definieren von Konstanten und Makros erklären:

Mit Hilfe de Preprozessorbefehles #define können sog. symbolische Konstante und Makros definiert werden. Die Syntax lautet:
#define <Ausdruck1>
#define <Ausdruck1> <Ausdruck2>

Im ersten Fall wird eine Preprozessorkonstante definiert, deren Existenz später durch andere Preprozessorbefehle geprüft werden kann.
Im zweiten Fall ersetzt der Preprozessor im Quellcode jeden <Ausdruck1> durch <Ausdruck2>. Beispiele:
#define DEBUG
#define PI 3.14159
#define NULL 0
#define EOF -1

Mit Hilfe der Preprozessoranweisung #define können nicht nur Konstante, sondern auch sogenannte parametrisierte Makros definiert werden. Hier werden nach dem Makronamen ein oder mehrere Parameter (veränderliche Größen) angegeben, die dann bei Verwendung des Makros mit Werten belegt werden müssen.
Beim Suchen und Ersetzenwerden auch die Parameter in der Makrodefinition durch diese Werte belegt.

Das folgende Beispiel verwendet ein Makro zur Bestimmung des größeren von zwei Werten:

001 #include<stdio.h>
002 #define MAX(x,y) ((x)>(y)?(x):(y)) /* Makrodefinition */
003
004 int main() {
005 int a = 10, b = 15;
006
007 printf("Maximum von %3d und %3d: %3d\n", a, b, MAX(a,b));
008 printf("Maximum von %3d und %3d: %3d\n", 3*a, b, MAX(3*a,b));
009 printf("Maximum von %3d und %3d: %3d\n", a+b, b-a, MAX(a+b,b-a));
010 return 0;
011 }

Ausgabe:
========
Maximum von 10 und 15: 15
Maximum von 30 und 15: 30
Maximum von 25 und 5: 25

Erklärung:
Die Zeilen 007 bis 009 des obigen Beispiels werden vom Preprozessor zu folgenden Zeilen verändert:

007 printf("Maximum von %3d und %3d: %3d\n", a, b, ((a)>(b)?(a):(b));
008 printf("Maximum von %3d und %3d: %3d\n", 3*a, b, ((3*a)>(b)?(3*a):
(b));
009 printf("Maximum von %3d und %3d: %3d\n", a+b, b-a,
((a+b)>(b-a)?(a+b):(b-a));

--------------------------
Weitere Beispiele für Makros:

-) Das Makro
#define TOUPPER(c) ((c)-'a'+'A')
verwandelt Kleinbuchstaben des englischen Alphabets in
Großbuchstaben. Für alle anderen Zeichen ergibt sich ein unsinniges
Ergebnis.
In der Datei ctype.h finden sich viele Makros zur Zeichenmanipulation.

-) Das Makro
#define SCHALTJAHR(a) (((a)%4==0 && (a)%100!=0) || (a)%400==0)
prüft, ob im Parameter a die Jahreszahl eines Schaltjahres übergeben
wurde.

So ich hoffe das ist verständlich erklärt :)
Bei Fragen einfach eine Nachricht per PN oder icq: 308-226-105 oder mail an schm8lz@utanet.at schicken

mfg euer schmoelz

Bewertung Anzahl