Verständnisproblem Funktionszeiger / #define
-
Habe folgendes kleines Beispiel in Lehrbuch entdeckt und hätte eine kleine Frage dazu zum Verständnis:
#include <iostream>
using namespace std;
--------------- DIESER BEREICH HIER ---------------------------------------
#define DF(N) void N() { cout << "function " #N " called ..." << endl; }
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
void (*func_table[])() = { a,b,c,d,e,f,g };
Wie ist es möglich, daß hier ein Array aus Funktionszeigern definiert/initialisiert wird mit den Bezeichnern a-g, die nirgendwo selbst definiert sind?? Bzw. davor die Zeile mit den Funktionsaufrufen. Wie arbeitet hier der Compiler?
---------------------- BIS HIER -------------------------------
int main(int argc, char** argv)
{while(1) {
cout << "press a key from 'a' to 'g' or q to quit" << endl << endl;char c, cr;
cin.get(c); cin.get(cr);
if (c == 'q' )
break;if (c < 'a' || c > 'g' )
continue;(*func_table[c-'a'])();
}
system("PAUSE");
return 0;
}
-
Die Einträge DF(a); bis DF(g); werden vom Präprozessor umgewandelt in Funktionsdefinitionen, z.B. aus DF(a); wird:
void a() {cout<<"function a called"<<endl;};
Damit hast du dann 7 definierte Funktionen, die du mit der func_table-Definition (das ist ein Array aus Pointern auf void x()-Funktionen) zu einem Array zusammenfaßt.
-
Danke, das klärt die Sache!