char* oder unsigned char*



  • Hallo!

    Ich quäle mich seitdem ich angefangen habe C++ zu lernen mit der Frage, ob man nur char oder auch unsigned char für C-Strings verwenden soll.
    In den früheren Projekten habe ich immer unsigned char verwendet mittlerweile meist nur "noch" char (aus Bequemlichkeit), da man viele strX Funktionen inline einbinden kann und es unter Windows imho überhaupt keinen Unterschied macht, denn alle 255 Asciizeichen lassen sich sowohl mit char als auch unsigned char darstellen.

    Dennoch verlangt ein guter, konsqeuenter Programmierstil imho eine Unterscheidung beider Typen.

    Gibt es auf anderen Systemen wie Linux, ... Unterschiede zwischen char und unsigned char?



  • Ich nehme weder das eine noch das andere, sondern je nach Anwendungfall std::string oder QString



  • Bei manchen Compilern kannst du einstellen, ob char unsigned sein soll.

    Aber ich halte signed für die Regel. Soweit sind die ANSI Runtime-Funktionen ja auch so ohne unsigned deklariert.

    Und außerdem: Wenn die C Entwickler einen unsigned char gewollt hätten, hätten sie ihn byte genannt und nicht char 😉 🤡



  • Nimm lieber für normale Strings einfach char, da die Stringfunktionen ja darauf auch ausgelegt sind.

    denn alle 255 Asciizeichen lassen sich sowohl mit char als auch unsigned char darstellen.

    ASCII hat keine 255 Zeichen!



  • kingruedi schrieb:

    Nimm lieber für normale Strings einfach char, da die Stringfunktionen ja darauf auch ausgelegt sind.

    denn alle 255 Asciizeichen lassen sich sowohl mit char als auch unsigned char darstellen.

    ASCII hat keine 255 Zeichen!

    Stimmt. Nur 128 Zeichen. Ich meinte dann den erweiterten ASCII-Zeichensatz. 😉



  • Als ich mit C anfing, lang ist es her, da habe ich auch immer unsigned char genommen, weil ich dachte, dass man dann auch problemlos den erweiterten ASCII Zeichensatz verwenden kann. Irgendwann ist mir dann aufgefallen, dass dies eigentlich Blödsinn ist. Mittlerweile sehe ich char, sofern es tatsächlich um Zeichen geht, losgelöst von den integralen Typen und damit auch von der signed/unsigned Spezifikation. Wenn's also um Zeichen geht, dann nehm ich einfach nur char, mit ohne allem. 🙂
    Ich bin mir momentan nicht einmal sicher, ob zB signed/unsigned auch bei wchar_t zulässig ist. Wieso sollte man sich deshalb bei char damit belasten.



  • HaJo. schrieb:

    kingruedi schrieb:

    Nimm lieber für normale Strings einfach char, da die Stringfunktionen ja darauf auch ausgelegt sind.

    denn alle 255 Asciizeichen lassen sich sowohl mit char als auch unsigned char darstellen.

    ASCII hat keine 255 Zeichen!

    Stimmt. Nur 128 Zeichen. Ich meinte dann den erweiterten ASCII-Zeichensatz. 😉

    Der auch nicht :p



  • Nun ja, erweitertes ASCII ist doch so eine DOS Geschichte. Ich denke mal, das die meisten Terminal-Emulationen mit iso-8859-XX laufen (in D wahrscheinlich 1 oder 15)


Anmelden zum Antworten