Sprachliche Unterschiede zwischen C und C++?



  • kingruedi schrieb:

    net schrieb:

    eine längenangabe (int)

    dafür gibt es doch size_t 🙂 bzw. std::size_t, wenn wir schon bei C und C++ unterschieden sind 😉

    klar, aber size_t ist manchmal richtig gross. wenn man nur kurze strings hat kann man auch 'ne ein-byte-längenangabe nehmen. dagegen spricht wieder, dass ints oft von der maschine einfacher verarbeitet werden können als bytes. egal wie man's macht - es ist immer nur ein kompromiss 😉

    volkard schrieb:

    ach, red einfach nicht mit.

    und du formulier' mal nicht so'n kauderwelsch. bei deinen texten muss man manchmal echt raten was du meinst...



  • net schrieb:

    klar, aber size_t ist manchmal richtig gross.

    Woah, das ist so groß, wie es für die Maschine gerade passt und bei einem 8Bit - Mikrocontroller ist es auch nicht 512 Bit groß. Außerdem wird das ganze Zeugs eh aligned, bei nem Array sparst du vielleicht was mit nem kleineren Typ, das halte ich aber für eher unwahrscheinlich für ne lokale oder Membervariable.
    Am Ende braucht es doch wieder so viel Platz wie size_t und muss aber nach jeder arithmetischen Operation abgeschnitten werden.



  • Optimizer schrieb:

    net schrieb:

    klar, aber size_t ist manchmal richtig gross.

    Woah, das ist so groß, wie es für die Maschine gerade passt und bei einem 8Bit - Mikrocontroller ist es auch nicht 512 Bit groß.

    Aber 16 🙄 Programmier mal den 8051 in Assembler, dann lernst du diesen Unterschied kennen 🙂



  • Gibt es in C++ eigentlich _irgendein_ System bei den Größen der verschiedenen Typen? 😉 🤡



  • Jo.

    1 Byte <= char <= short <= int <= long
    int >= 16 Bit
    long >= 32 Bit



  • Michael E. schrieb:

    Jo.

    1 Byte <= char <= short <= int <= long
    int >= 16 Bit
    long >= 32 Bit

    Wobei char = 1Byte, denn ein Byte ist die in C++ zugrunde liegende Speicher-
    einheit und ein char der kleinste adressierbare Typ.

    Wieviel Bits ein Byte hat, ist allerdings nicht spezifiziert.

    mfg
    v R



  • Na, das kenn ich auch. Das kann aber (fast) _alles_ bedeuten. Sollte jetzt auch nicht so furchtbar ernstgemeint sein, wie man an den Smileys möglicherweise erkennen kann.
    Wenn ich weiß, welchen Code mein Compiler für meine Plattform erzeugt, ist mir der Rest herzlich egal. Ich finde die Spezifikation halt Unsinn (man beachte nur mal "von -127 bis +127"). Es gibt zu wenige Dinge, auf die man sich hier verlassen kann (z.B. wie ne Division abzulaufen hat). Aber damit will ich jetzt nicht weiter anfangen, ignoriert mich einfach. 🙂



  • Ohne diesen "Unsinn" wär es unmöglich, C effizient auf einem System mit Einerkomplementdarstellung zu implementieren.



  • volkard schrieb:

    es wird dort nur deswegen kein c++ eingesetzt, weil die chefs gar keine ahnung haben, was c++ ist. daß man da nicht std::string nehmenb MUSS, ist nämlich mein geheimnis.

    Jetzt nicht mehr. 😃

    net schrieb:

    klar, aber size_t ist manchmal richtig gross

    IdR nicht. Da size_t sozusagen das unsigned Gegenstück zu ptrdiff_t ist, kann man davon ausgehen, dass size_t nicht mehr Speicher braucht als ein Zeiger.



  • groovemaster schrieb:

    net schrieb:

    klar, aber size_t ist manchmal richtig gross

    IdR nicht. Da size_t sozusagen das unsigned Gegenstück zu ptrdiff_t ist, kann man davon ausgehen, dass size_t nicht mehr Speicher braucht als ein Zeiger.

    das meinte ich mit 'richtig gross' (sorry, ich drücke mich nicht immer so klar aus).



  • Woher weisst du bei einer Laengenangabe eigentlich, wieviel Bytes du nun
    interpretieren musst, um die Laengenangabe korrekt interpretieren zu koennen? Oder
    willst du dafuer auch noch eine Angabe vorsehen?

    mfg
    v R



  • virtuell Realisticer schrieb:

    Woher weisst du bei einer Laengenangabe eigentlich, wieviel Bytes du nun
    interpretieren musst, um die Laengenangabe korrekt interpretieren zu koennen? Oder
    willst du dafuer auch noch eine Angabe vorsehen?

    nein, man muss das schon festlegen. angenommen man arbeitet nur mit sehr kurzen strings, dann reicht u.u. ein byte aus. können die strings länger sein, dann muss man eben 2 bytes nehmen usw. der vorteil gegenüber c-strings ist, dass man nicht jedesmal die 0 am ende suchen muss. ich glaub' turbo-pascal hatte doch solche strings, oder?



  • net schrieb:

    der vorteil gegenüber c-strings ist, dass man nicht jedesmal die 0 am ende suchen muss. ich glaub' turbo-pascal hatte doch solche strings, oder?

    jup.
    natürlich auch mit dem nachteil, daß strcpy nicht meha so geht:
    [cpp]

    while(*str++=*dst++)

    [/cpp]
    und strcmp wird auch schrecklich.

    natürlich riesen-vortiel beim ropes-bauen.

    aber wenn ich mal auf die schnelle registerübergabe bei ia64 schaue, ist mein weg doch der bessere. und da kannste 50-mal sagen, früher sei alles besser gewesen.



  • weniger fehleranfälligem code führen. ist dafür aber auch um einiges komplexer geworden.

    😃



  • volkard schrieb:

    net schrieb:

    der vorteil gegenüber c-strings ist, dass man nicht jedesmal die 0 am ende suchen muss. ich glaub' turbo-pascal hatte doch solche strings, oder?

    jup.
    natürlich auch mit dem nachteil, daß strcpy nicht meha so geht:
    [cpp]

    while(*str++=*dst++)

    [/cpp]
    und strcmp wird auch schrecklich.

    das Ist Natürlich Absolut Grausam, Denn Ich Schreibe Mindestens Dreimal Pro tag Ein Eigenes strcpy. und Das Wichtigste Bei strcpy Ist Ja Auch, Dass Man Es In Dieser kürze Notieren Kann, Da Man Ja Ständig An Diesem code Arbeitet.


Anmelden zum Antworten