Ist es sinnvoll heute noch C++ anzufangen?



  • die Konkatenation wäre auch mit einem Zeichen wie o oder . nicht schlecht beschrieben.

    schließlich bilden die Strings nicht nur eine Halbgruppe, sondern ein Monoid - sogar ein freies.



  • ~john schrieb:

    +fricky schrieb:

    oder kennst du (oder jemand anders hier) irgendeine echte abscheulichkeit in C, mit der man sich nicht arrangieren kann?
    🙂

    gets() wäre da sofort zu nennen. Ich denke, daran denkst Du noch nicht einmal, weil die Konvention es niemals zu benutzen, so tief verankert ist.
    scanf, printf etc. sind auch nicht viel besser. Immer wieder gibt es Exploits wegen dieser Klassiker.

    aber das sind nur funktionen. du kannst dir selbst welche schreiben, die sich weniger eigensinnig verhalten. ich meinte eigentlich die sprache selbst. gibt's da irgendwas, was schlecht ist? also mir fällt nix ein.
    🙂



  • Der fehlende operator<<(const volatile void*) ist auch nur eine Funktion.

    Hier, templatisieren mag das jemand anders:

    std::ostream& operator<<(std::ostream& os, const volatile void* p) {
      return os << const_cast<void*>(p);
    }
    

    (Hoffentlich ist die Diskussion damit beendet. Das ist ja nun nicht gerade eine Funktion, auf die 99,999% der C++-Programmierer sehnsüchtig gewartet haben.)



  • Der fehlende operator<<(const volatile void*) ist auch nur eine Funktion.

    Ich dachte impliziter Cast in void* geht nicht mehr? müsste also schon volatile int const* sein, oder?
    aber dennoch ist es auch nur eine fehlende Funktion, richtig.



  • Doch, NACH void* umwandeln geht immer implizit, nur von void* benötigt einen static_cast.



  • +fricky schrieb:

    ich meinte eigentlich die sprache selbst.

    Die Standard Library ist Teil der Sprache. Weiteres zu diesem Punkt ist schon angemerkt worden.

    +fricky schrieb:

    gibt's da irgendwas, was schlecht ist? also mir fällt nix ein.

    Ein paar Probleme die mir sofort einfallen.

    • Makros
    • Trigraphs
    • Zeigerarithmetik
    • Operator "?", ist redumdant zu "if"
    • Bedeutung von "extern"
    • Der konkrete Typ von char ist "implementation defined", er kann entweder "unsigned char" oder "signed char" sein.


  • Im Grunde ist C++ nur eine Verschlimmbesserung von C. Beim Versuch C objektorientiert zu machen wurde eine Menge Overhead erzeut der für größere und somit langsamere Programme sorgt. Und zusätzlich wurden noch viel mehr Möglichkeiten undefiniertes Verhalten hervorzurufen eingebaut.



  • ~john schrieb:

    [*]Makros

    sind doch gut und brauchbar in C. natürlich kann man mit makros auch mist fabrizieren, aber womit kann man das nicht?

    ~john schrieb:

    [*]Trigraphs

    hab' ich noch nie verwendet. ich muss jedesmal bei wikipedia o.ä. nachschauen, was das überhaupt ist. ist also nichts lebenswichtiges und daher auch kein wirkliches problem für C programmierer.

    ~john schrieb:

    [*]Zeigerarithmetik

    ist in C, weil C ziemlich maschinennah ist, sehr sinnvoll. was würdest du als ersatz vorschlagen?

    ~john schrieb:

    [*]Operator "?", ist redumdant zu "if"

    der ist z.b. gut, wenn du makros bauen willst, die einen wert 'zurückgeben' können. aber sonst braucht man's so gut wie nie.

    ~john schrieb:

    [*]Bedeutung von "extern"

    was findest du doof an 'extern'? oder meintest du vielleicht 'static'?

    ~john schrieb:

    [*]Der konkrete Typ von char ist "implementation defined", er kann entweder "unsigned char" oder "signed char" sein.

    dann nimm 'int'. wenn's unbedingt 'char' sein muss und vorzeichenbehaftung eine rolle spielt, dann schreib einfach ein 'signed' oder 'unsigned dazu.

    einiges von dem ^^ könnte einsteigern anfangs vielleicht kopfzerbrechen bereiten, aber echte unzulänglichkeiten hast du nicht eine einzige genannt. vielleicht weil es keine gibt?
    btw, ich verstehe jetzt nicht mehr, warum du dich manchmal abfällig über Java geäussert hast. das meiste was du da aufgezählt hast, ist in Java (trotz C-syntax) nicht vorhanden.
    🙂



  • +fricky schrieb:

    ~john schrieb:

    [*]Operator "?", ist redumdant zu "if"

    der ist z.b. gut, wenn du makros bauen willst, die einen wert 'zurückgeben' können. aber sonst braucht man's so gut wie nie.

    Und manche Sachen schreiben sich einfach schneller, hier eine statt fünf Zeilen:

    int degree =  is_dirty?  60  : 30;
    

    Redundanz als Begründung für "schlecht" finde ich merkwürdig oder hast du auch was gegen die while-Schleife?



  • ~john schrieb:

    • Makros

    Da kann ich nur bedingt zustimmen. Makros sind aber manchmal verdammt praktisch.

    ~john schrieb:

    • Trigraphs

    ich programmiere schon seit Jahren in C und hab auch alten Code warten müssen, doch so etwas wie Trigraphs wusste ich nicht einmal, dass es gibt. Zum ersten Mal davon gehört. Krass dass C sowas (noch) unterstützt.

    ~john schrieb:

    • Zeigerarithmetik

    Also, C ohne Zeigerarithmetik ist kein C mehr. Wenn man sehr maschinennah arbeitet, ist das oft notwendig und es gibt sogar Architkturen, die das "von Hause aus" können, ARM zu Beispiel.

    ~john schrieb:

    • Operator "?", ist redumdant zu "if"

    ist nicht überflüssig, vor allem, wenn man mit Makros arbeitet. Aber da du ja Makros nicht magst ...

    ~john schrieb:

    • Bedeutung von "extern"

    verstehe ich nicht, was da so schrecklich daran ist.

    ~john schrieb:

    • Der konkrete Typ von char ist "implementation defined", er kann entweder "unsigned char" oder "signed char" sein.

    das stimmt, das kann viel schon Ärger machen, wenn man nicht aufpasst.



  • C ist lässig, leger, gut gelaunt und einfach genial.

    Wer damit nicht zurechtkommt weil die Phantasie fehlt soll Java oder so was nehmen.



  • Scheppertreiber schrieb:

    C ist lässig, leger, gut gelaunt und einfach genial.

    Wer damit nicht zurechtkommt weil die Phantasie fehlt soll Java oder so was nehmen.

    So sieht's aus.



  • Scheppertreiber schrieb:

    C ist lässig, leger, gut gelaunt und einfach genial.

    hey, ich bin scheinbar nicht der einzige C-fanboy hier 😉

    Scheppertreiber schrieb:

    Wer damit nicht zurechtkommt weil die Phantasie fehlt soll Java oder so was nehmen.

    grrrrr... 😡
    (mal kein grinse-smiley, weil zwei andere schon da sind)



  • Isdochwahr ...

    Brauche ich ein Objekt nehme ich es in die linke Hand und schubse es gelangweilt vom Schreibtisch 😉
    Dann mache ich ein Bier auf und die Welt ist in Ordnung ...



  • Badestrand schrieb:

    +fricky schrieb:

    ~john schrieb:

    [*]Operator "?", ist redumdant zu "if"

    der ist z.b. gut, wenn du makros bauen willst, die einen wert 'zurückgeben' können. aber sonst braucht man's so gut wie nie.

    Und manche Sachen schreiben sich einfach schneller, hier eine statt fünf Zeilen:

    int degree =  is_dirty?  60  : 30;
    

    Redundanz als Begründung für "schlecht" finde ich merkwürdig oder hast du auch was gegen die while-Schleife?

    Da finde ich Python lesbarer:

    degree = 60 if is_dirty else 30
    

    Devent, der jetzt (wahrscheinlich) von Java auf Python wechselt. 😃



  • grrrrr...
    (mal kein grinse-smiley, weil zwei andere schon da sind)

    Vielleicht fällt dir dann mal auf, dass deine Argumentation für C und deine Argumentation für Java total widersprüchlich sind.
    Bei C gegen C++ sagst du "C hat keine Unzulänglichkeiten, man kann mit jedem Feature Mist bauen, wenn man es falsch benutzt, aber als guter Programmierer passiert das nicht"
    Bei Java gegen C++ sagst du "doch, das passiert, aber auf jeden Fall, egal was ist. C++ Features sind gefährlich, man kann mit Javatools auf keinen Fall Mist bauen etc. pp. blahblah.".



  • DEvent schrieb:

    Devent, der jetzt (wahrscheinlich) von Java auf Python wechselt. 😃

    dann muß java ja echt auf dem absteigenden Ast sein 👍

    😃



  • +fricky schrieb:

    Scheppertreiber schrieb:

    C ist lässig, leger, gut gelaunt und einfach genial.

    hey, ich bin scheinbar nicht der einzige C-fanboy hier 😉

    ich bin auch ein C-Fanboy! nur, ich kenne mich nicht mit C++ aus, deshalb kann ich da nicht mitreden 😡



  • supertux schrieb:

    ich bin auch ein C-Fanboy! nur, ich kenne mich nicht mit C++ aus, deshalb kann ich da nicht mitreden 😡

    Keine Scheu, Sachkenntnis ist bei sowas auch eher hinderlich.



  • Bashar schrieb:

    supertux schrieb:

    ich bin auch ein C-Fanboy! nur, ich kenne mich nicht mit C++ aus, deshalb kann ich da nicht mitreden 😡

    Keine Scheu, Sachkenntnis ist bei sowas auch eher hinderlich.

    👍


Anmelden zum Antworten