Named loops - Kann mir jemand das Makro erklären?



  • Hi

    Ich habe gerade über C++ Named Loops gelesen. Was ich allerdings nicht verstehe ist was hier bei dem Makro passiert:

    #define named(blockname) goto blockname; \
    blockname##_skip: if (0) \
    blockname:

    #define break(blockname) goto blockname##_skip;

    Kann mir jemand erklären, was da zeilenweise passiert? Ich kenne mich mit Makros leider nicht aus. Falls jemand eine gute Website kennt, wo man etwas über Makros lernt, wäre ich auch dankbar.



  • Im ersten Schritt hast Du quasi Folgendes:

    goto LABEL;
    LABEL_skip:  //wird durch das goto LABEL übersprungen
    if(false) //wird durch das goto LABEL übersprungen
    LABEL:
    for(...) //die Named-Loop
    {
    }
    

    Wenn dann das break kommt gehts so weiter:

    LABEL_skip:
    if(false) //die Schleife wird nicht mehr ausgeführt...
    for(...) //die Named-Loop
    {
       break(LABEL); //springt zu LABEL_skip
    }
    

    blockname##_skip klebt das, was man für blockname setzt an _skip ran. blockname## ist also ein Platzhalter für das, was der Benutzer tatsächlich vorgibt. Im Beispiel oben also LABEL .

    Beschreibungen gibts z.B. hier.
    Das, was hier gemacht wird läuft unter "Token concatenation".



  • Danke für die Erklärung. Ich probiers mal aus 🙂


Anmelden zum Antworten