Makro funktioniert nicht, warum?



  • Ok, und der Backslash ('****0')dient dann nur der Unterscheidung zu ('0') als eigentlichem, dargestelltem Zeichen?



  • jein. Im ASCII-Code sind auch Zeichen enthalten, die nicht gerdückt (dargestellt) werden können (die ersten 32 z.b.). Um diese trotzdem eingeben zu können, muss man "escapen", sprich ein bekanntes Zeichen mit einem vorangehenden Backslash. '\n' ist ein Bsp. dafür, '\n' entspricht ASCII 10. '\0' entspricht 0.

    Du kannst aber nicht jedes Zeichen "escapen", z.b. "\1" hat keine Bedeutung im Standard.



  • merci



  • Da hier nur eine philosophische Diskussion über Makros ausgebrochen ist, niemand aber die eigentliche Frage beantwortet hat, hier mal mein Vorschlag:

    Allerdings nur für Integer, sonst war's das 😃

    #define MPOW(result, base, exp) for (result = 1; exp--; result *= base);
    


  • du kannst es aber nicht als r-value benutzen, wie jizzer es haben will. D.h, sowas wie

    int x = MPOW(x, 2, 4);
    printf("%d\n", MPOW(???, 2, 4));
    

    geht schief.



  • Wäre es nicht sinnvoll bei MPOW den Parameter result wegzulassen, da er eh auf 1 gesetzt wird?
    Und, dass es keinen return-wert gibt sehe ich auch

    Guten Abend noch 🙂



  • nein, es ist nicht sinnvoll, da du mehrere Anweisungen hast und while/for Schleifen keinen Wert zurückliefern können.

    Hör auf dich mit dem Schwachsinn zu beschäftigen. Es ist so, als würdest du dir Gedanken machen, wie du in die Dusche reingehst, ohne naß zu werden.



  • Ich versuche bloß das Beispiel zuendezudenken - vom eigentlichen Nutzen mal abgesehen - und lerne damit ein paar Feinheiten von C dazu.

    PS: Hast du vll ne Antwort zu dem struct-thread?



  • Makro sind nur in Verbindung mit Templates gut, aber das ist dann C++ *gg*



  • jizzerr schrieb:

    Ich versuche bloß das Beispiel zuendezudenken - vom eigentlichen Nutzen mal abgesehen - und lerne damit ein paar Feinheiten von C dazu.

    PS: Hast du vll ne Antwort zu dem struct-thread?

    das führt aber zu keinem vernünftigen Ergebniss, es ist so, als würdest du im Handwerkerforum doch nachfragen, wie man es doch hinkriegt, mit dem Schraubenzieher einen Nagel in die Wand zu hammern (um bloß das Beispiel zuendezudenken), und dort werden sie dir auch sagen, dass ein Schraubenzieher kein Hammer ist. Hier genauso, ein Makro (== Schraubenzieher) ist keine Funktion (== Hammer). Wenn eine Funktion in einem Makro semantisch 1:1 nachimplementieren könntest, dann bräuchte man keine Funktionen und man würde nur Makros haben. Verschwende deine Zeit mit diesem Unsinn nicht.

    So wie du es benutzen willst, wirst du mit einem Makro nicht hinkriegen, da brauchst du nichts zu Ende zu denken, du reitest auf ein totes Pferd.


Anmelden zum Antworten