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!


Anmelden zum Antworten