Unsigned | Signed .. Standart wenn keine Angabe



  • Die Idee ist, dass bestehender Code nicht falsch wird, wenn eine Überladung hinzugefügt wird.
    BTW ist das hier extrem OT.



  • Bashar schrieb:

    Die Idee ist, dass bestehender Code nicht falsch wird, wenn eine Überladung hinzugefügt wird.

    das scheint aber nicht zu funktionieren.
    zuerst:

    void foo (int)
    {
        cout<<"richtig\n";
    }
    
    int main ()
    {
       foo('a');
    }
    

    irgendwann später:

    void foo (int)
    {
        cout<<"richtig\n";
    }
    
    void foo (char)
    {
        cout<<"falsch\n";
    }
    
    int main ()
    {
       foo('a');
    }
    

    🙂



  • In dem Beispiel von LordJaxom wird dem Compiler die char- Sache wurscht, sobald man nicht typisierte Pointer, sondern Werte in die Funktion stopft, da ist dann Schluß mit Typüberwachung.
    Vermutlich nur so eine Sache mit der möglichen Sonderrolle von char* als String.

    In C99 gibt's ja auch nur int8_t und uint8_t als Ersatzbezeichner, der dritte Typ ist nur Compiler- Folklore.



  • pointercrash() schrieb:

    In dem Beispiel von LordJaxom wird dem Compiler die char- Sache wurscht, sobald man nicht typisierte Pointer, sondern Werte in die Funktion stopft, da ist dann Schluß mit Typüberwachung.

    Richtig.

    ;fricky schrieb:

    hab's nicht ausprobiert, aber ich schätze er wird mal 'signed/unsigned-mismatch' und mal sowas wie 'truncation' anmeckern. oder meintest du was anderes?
    🙂

    Falsch.
    Er meckert drei mal "Pointers differ in signedness".
    Damit wollte ich zeigen dass int == signed int, aber mitnichten char == signed char (oder unsigned char). Aber dass Du auf etwas anderes kommst war mir fast klar 😉



  • LordJaxom schrieb:

    Damit wollte ich zeigen dass int == signed int, aber mitnichten char == signed char (oder unsigned char).

    Welchen Sinn Du darin siehst, Du mir sagen mußt, junger Jedi (frei nach Yoda).

    Wir dürften uns alle einig sein, daß alle ganzzahligen Typen eigentlich nur signed oder unsigned sein können und das Ganze auf die unterschiedliche Interpretation des MSB hinausläuft.

    Beim Char dürfte eine Lücke (oder eine doofe Definition) im Standard dafür verantwortlich sein, daß da kein einheitlicher default ist, deswegen müssen Compiler drei Fälle unterscheiden (wohl implementation defined).

    Also normalo: Signed, bei char müssen Bytefuchser aber aufpassen.



  • LordJaxom schrieb:

    Aber dass Du auf etwas anderes kommst war mir fast klar

    wie gesagt, habs leider immer noch nicht ausprobiert, aber ich glaube dir auch so. was würde eigentlich passieren, wenn du statt adressen die variablenwerte selbst übergeben würdest? auch 3 warnings?
    🙂



  • ;fricky schrieb:

    was würde eigentlich passieren, wenn du statt adressen die variablenwerte selbst übergeben würdest? auch 3 warnings?
    🙂

    Hatten wir schon (sh. meinen vorletzten Post) ^^^^^^^^^^
    Nee, passiert gar nichts - char hat keinen default => Compiler- Folklore. 😉


Anmelden zum Antworten