Coding Styles Horror



  • DrGreenthumb schrieb:

    dazu fällt mir zb. if(!(buf=malloc(..))) exit(1); ein... in einem C++ constructor 😞

    da hab ich lieber Heinzelmännchen.

    exits in Code von Bibliotheken hab ich auch ein Paar mal gesehen. Grausam sowas...



  • zwutz schrieb:

    #ifndef RANDOMCLASS_H
    #define RANDOMCLASS_H
    
    using namespace std;
    
    class RandomClass
    {
       ...
    };
    
    #endif
    

    derartiges findet sich in einigen sehr oft verwendeten Bibliotheken unserer Software

    `
    na und? normal, wa.



  • hääääh? schrieb:

    na und? normal, wa.

    using namespace im HEADER-File.



  • char inttochar(int u)
    {
        if(u==0){return '0';}
        if(u==1){return '1';}
        if(u==2){return '2';}
        if(u==3){return '3';}
        if(u==4){return '4';}
        if(u==5){return '5';}
        if(u==6){return '6';}
        if(u==7){return '7';}
        if(u==8){return '8';}
        if(u==9){return '9';}
    }
    
    int chartoint(char v)
    {
        if(v=='0'){return 0;}
        if(v=='1'){return 1;}
        if(v=='2'){return 2;}
        if(v=='3'){return 3;}
        if(v=='4'){return 4;}
        if(v=='5'){return 5;}
        if(v=='6'){return 6;}
        if(v=='7'){return 7;}
        if(v=='8'){return 8;}
        if(v=='9'){return 9;}
    }
    

    Da hatte wohl jemand nicht viel Ahnung von der ASCII Tabelle 😃



  • Nachdenken! schrieb:

    char inttochar(int u)
    {
        if(u==0){return '0';}
        if(u==1){return '1';}
        if(u==2){return '2';}
        if(u==3){return '3';}
        if(u==4){return '4';}
        if(u==5){return '5';}
        if(u==6){return '6';}
        if(u==7){return '7';}
        if(u==8){return '8';}
        if(u==9){return '9';}
    }
    
    int chartoint(char v)
    {
        if(v=='0'){return 0;}
        if(v=='1'){return 1;}
        if(v=='2'){return 2;}
        if(v=='3'){return 3;}
        if(v=='4'){return 4;}
        if(v=='5'){return 5;}
        if(v=='6'){return 6;}
        if(v=='7'){return 7;}
        if(v=='8'){return 8;}
        if(v=='9'){return 9;}
    }
    

    Da hatte wohl jemand nicht viel Ahnung von der ASCII Tabelle 😃

    Oder er hatte Alien OS 2.0 das hat keine ASCII Tabelle.



  • Besser mieser und gehackter Code aber die Anwendung geht, als Theoretiker, die den ganzen Tag nur über Konstrukte nachdenken und letztlich nix schaffen.



  • RealistX schrieb:

    Theoretiker, die den ganzen Tag nur über Konstrukte nachdenken und letztlich nix schaffen.

    Hab ich noch nie einen gesehen.



  • Nachdenken! schrieb:

    char inttochar(int u)
    {
        if(u==0){return '0';}
        if(u==1){return '1';}
        if(u==2){return '2';}
        if(u==3){return '3';}
        if(u==4){return '4';}
        if(u==5){return '5';}
        if(u==6){return '6';}
        if(u==7){return '7';}
        if(u==8){return '8';}
        if(u==9){return '9';}
    }
    
    int chartoint(char v)
    {
        if(v=='0'){return 0;}
        if(v=='1'){return 1;}
        if(v=='2'){return 2;}
        if(v=='3'){return 3;}
        if(v=='4'){return 4;}
        if(v=='5'){return 5;}
        if(v=='6'){return 6;}
        if(v=='7'){return 7;}
        if(v=='8'){return 8;}
        if(v=='9'){return 9;}
    }
    

    Da hatte wohl jemand nicht viel Ahnung von der ASCII Tabelle 😃

    Naja, das ist die portabelste Version dieser Funktionen. Sie funktioniert auf beliebigen Architekturen die char und int unterstützen...



  • µµµµønsŧ&#83 schrieb:

    Naja, das ist die portabelste Version dieser Funktionen. Sie funktioniert auf beliebigen Architekturen die char und int unterstützen...

    Außer natürlich, es würde im Sprachstandard stehen, daß der Zeichensatz die Ziffern von 0 bos 9 aufeinandefolögfend unterzubringen hat.



  • Wäre dann ein switch/case-Konstrukt nicht immer noch vorzuziehen?



  • Switcha schrieb:

    Wäre dann ein switch/case-Konstrukt nicht immer noch vorzuziehen?

    Warum nicht einfach das?

    char inttochar(int u)
    {
    	return *("0123456789" + u);
    }
    


  • TyRoXx schrieb:

    Switcha schrieb:

    Wäre dann ein switch/case-Konstrukt nicht immer noch vorzuziehen?

    Warum nicht einfach das?

    char inttochar(int u)
    {
    	return *("0123456789" + u);
    }
    

    also

    char inttochar(int u)
    {
    	return "0123456789"[u];
    }
    

    oder

    char inttochar(int u)
    {
    	return u["0123456789"];
    }
    


  • ^^für hexziffern ist die array-methode gut, wegen der lücke zwischen '9' und 'a'.
    ansonsten natürlich: #define to_char(x) ('0'+(x))
    🙂



  • wie wärs mit:

    int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
    //statt
    int Buchstabe[27];
    


  • Tim06TR schrieb:

    wie wärs mit:

    int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
    //statt
    int Buchstabe[27];
    

    und dann noch das:

    int *Buchstabe[] = {&a,&b,&c,&d, ...};
    

    🙂



  • ;fricky schrieb:

    ^^für hexziffern ist die array-methode gut, wegen der lücke zwischen '9' und 'a'.
    ansonsten natürlich: #define to_char(x) ('0'+(x))
    🙂

    Oder

    return '0'+x;
    

    Habt ihr in C noch keine optimierende Compiler? Doch, die habt ihr, da bin ich ganz sicher.
    Im Übrigen war

    #define to_char(x) ('0'+(x))
    

    natürlich falsch.
    Besser wäre, wenn man schon so weit in der Geschichte zurückgehen will,

    #define to_char(x) ((char)('0'+(x)))
    


  • volkard schrieb:

    Im Übrigen war

    #define to_char(x) ('0'+(x))
    

    natürlich falsch.

    nö, das geht schon so. ein cast würde z.b. beim codewarrior-compiler das tolle feature unterdrücken, dass eine warnung kommt, bei addition zweier konstanten, deren ergebnis nicht mehr in ein char passt.
    statt cast vielleicht besser sowas:

    #define DECIMAL_DIGIT_TO_CHAR(x) ((x)>=0&&(x)<=9 ? '0'+(x) : -1)
    

    🙂



  • Typen sind Dir egal.



  • volkard schrieb:

    Typen sind Dir egal.

    nicht wirklich, aber 'char' und 'int' sind schon ziemlich kompatibel, bis auf kleine unterschiede.
    🙂



  • ;fricky schrieb:

    bis auf kleine unterschiede.

    Und warum die ignorieren?
    Es wird doch mit Sicherheit ein Kasper in einem weiteren Makro typeof oder sizeof benutzen. Zwing ihn doch nicht, die Doku zu lesen, das tut er eh nicht. Machs einfach richtig. to_char() sollte schon einen char liefern.


Anmelden zum Antworten