#define Macro entschlüsseln.



  • In diesem Mini Code, wird mul(3, 4) durch 3 * 4 + 10 ersetzt.
    Gibt es eine Möglichkeit, dieser entschlüsselte Code anzugucken ?
    Mit einer Debuggerfunktion oder was ähnlichem.

    #include <stdio.h>
    
    #define mul(x, y) (x * y + 10)
    
    int main() {
      printf("Multi: %d\n", mul(3, 4));
    }
    

    Der Compiler muss dies ja machen, bevor er die Daten weiter verarbeitet.



  • Normalerweise kann man den Compiler anweisen das Zwischenergebnis in eine Datei abzulegen. Früher war es auf UNIX Systemen üblich, dass der Präprozessor cpp ein eigenständiges Programm, das zuerst die Textersetzungen durchführte bevor dann cc dann die eigentliche Übersetzung durchführte. Beim gcc erreicht man das mit -E oder in dem man cpp aufruft. Falls Du einen anderen Compiler nutzt musst Du in die Doku schauen.


  • Banned

    @Mathuas sagte in #define Macro entschlüsseln.:

    Der Compiler muss dies ja machen, bevor er die Daten weiter verarbeitet.

    Das ist einfach nur eine pups-einfache Textsubstitution, die der Compiler vor dem Kompilierungsschritt macht. Da passiert kaum Magic.



  • @john-0

    gcc main.c -E

    Danke, ganz zu unterst erscheint:

    # 9 "main.c"
    int main() {
      printf("Multi: %d\n", (3 * 4 + 10));
    }
    


  • @Mathuas sagte in #define Macro entschlüsseln.:

    @john-0

    gcc main.c -E

    Danke, ganz zu unterst erscheint:

    Ja, das ist manchmal echt nützlich. Der einzige Nachteil ist, dass eben auch rekursive #includes eine "Macro expansion" sind. Da kann das schonmal schnell ziemlich unübersichtlich werden, wenn die betreffende Code-Stelle nicht gerade "ganz zu unterst" in der main ist 😁


Log in to reply