Nutzung der break Anweisung sinnvoll?



  • berniebutt schrieb:

    @Shade Of Mine: Was soll das? Einen Compiler ohne if schmeisse ich einfach weg.

    Irgendwas hast du nicht verstanden. Aber keine Ahnung was. Dein Post macht in Bezug auf meinen absolut keinen Sinn...



  • Mr. N schrieb:

    knivil schrieb:

    Doch, if ist ein Schlüsselwort in Haskell. Ich wünschte es wäre eine Funktion, dem ist aber nicht so.

    Gut, wieder was gelernt. Gibt es irgendwo im Netz was zum Nachlesen, warum sie es in die Sprache aufgenommen haben?



  • Um eben auch innerhalb einer Funktionsdefinition eine Bedingung abzufragen (und nicht dafür wieder eine neue Funktion (mit Patternmatching!) definieren zu müssen).
    Aus anderen funktionalen Sprachen (wie Miranda, Gofer, Clean, ...) kenne ich:

    abs x = x, if x >= 0
            -x, otherwise
    

    Mittels Pattern-Matching könnte man kaum diese Funktion einfach definieren...



  • Leute, gcc unterstützt ein tolles Feature: Zeiger auf Sprungmarken! In Verbindung mit gotos sind der Phantasie keine Grenzen gesetzt:

    void myfunc(int a, int b)
    {
        static void *location[] = { &&not_greater, &&greater };
    
        goto *location[a > b];
    
    not_greater:
        printf("a <= b\n");
        return;
    
    greater:
        printf("a > b\n");
        return;
    }
    

    Man kann also ruhig ohne die ganzen verschachtelten bösesn ifs programmieren 🙂



  • knivil schrieb:

    Mr. N schrieb:

    knivil schrieb:

    Doch, if ist ein Schlüsselwort in Haskell. Ich wünschte es wäre eine Funktion, dem ist aber nicht so.

    Gut, wieder was gelernt. Gibt es irgendwo im Netz was zum Nachlesen, warum sie es in die Sprache aufgenommen haben?

    Ich weiß es nicht. Haskell 98 ist nun schon ein paar Jahre alt, und vielleicht dachten sie einfach, dass eine Sprache ohne if nicht vollständig wäre oder was weiß ich. Ich fände das als Funktion aber definitiv besser.



  • Ich dachte, ich würde eine Welle der Begeisterung auslösen 😞
    gotos mit Zeigern auf Sprungmarken, hip, hip, hurra!
    hip, hip, hurra!
    hip, hip,



  • abc.w schrieb:

    Ich dachte, ich würde eine Welle der Begeisterung auslösen 😞
    gotos mit Zeigern auf Sprungmarken, hip, hip, hurra!
    hip, hip, hurra!
    hip, hip,

    ich freute mich begrenzt, da ich es schon kannte, hip, hip, hurra! 😉

    übers if(0) case ... ; bzw. while(0) case ... ; freute ich mich richtig... hab ich so noch nie gesehen 😋



  • @_--: 👍
    Finde ich auch eine gute Idee, Unterstrich als Bezeichner zu nutzen:

    unsigned int _ = 0;
    
        for (_ = 0; _ < N; ++_) buffer[_] = 0;
    

    😃



  • Und natürlich lässt sich mit derselben Methode auch die for-Schleife vermeiden. Das obige Beispiel kann man auch so schreiben:

    _ = 0;
    start:
        buffer[_] = 0;
        goto *(++_ < N ? &&start: &&end);
    end:
    

    Man kann sich austoben damit und wie... 🙂



  • der code lässt sich auch rückwärts ausführen 🤡

    #include <stdio.h>
    #include <limits.h>
    
    int main(){
     static void *__[] = {0,0,&&hello,&&w,&&o,&&r,&&l,&&d,&&end},**_ = __+CHAR_BIT;
    
     #define _ _--
    
                              goto **_;
     hello:                   return 0;
     w:     printf("d\n");    goto **_;
     o:     printf("l");      goto **_;
     r:     printf("r");      goto **_;
     l:     printf("o");      goto **_;
     d:     printf("w");      goto **_;
     end:   printf("hello "); goto **_;
    }
    

Anmelden zum Antworten