Unterschied c c++ c#



  • Shade Of Mine schrieb:

    OOP Guy schrieb:

    Nein, otze möchte das. Ich gebe einfach im vorliegenden Fall immer den Fehlercode INVALID_PORTDATA_OBJECT zurück.

    Super Idee. Das ganze wird dann 2 Ebenen nach oben gereicht und ploetzlich hat sich errno geaendert, weil ja auch etwas anderes fehlschlaegt. Waehrend du einfach Exception Chaining machen kannst (OK, das ist in C++ nicht ganz ideal machbar) faellst du mit errno hier komplett auf die Nase.
    Genial.

    Super Idee. Die Exception wird dann 2 Ebenen nach oben gereicht und ploetzlich wirft ein Destruktor eine weitere Exception, weil ja auch etwas anderes fehlschlaegt. Waehrend du einfach Fehlercodes verwenden kannst (OK, das ist in C manchmal etwas aufwändig) faellst du mit Exceptions hier komplett auf die Nase.
    Genial.



  • Und was haben wir jetzt damit bewiesen? 😕



  • OOP Guy schrieb:

    Und was haben wir jetzt damit bewiesen? 😕

    nichts wie jedes mal...



  • OOP Guy schrieb:

    Und was haben wir jetzt damit bewiesen? 😕

    das mit unregs diskutieren Zeitverschwendung ist.



  • Sinnl0s3 schrieb:

    OOP Guy schrieb:

    Und was haben wir jetzt damit bewiesen?

    nichts wie jedes mal...

    Nicht ganz. Wenn wir mal die beiden Codeschnipsel vergleichen (C und C++), dann sehen wir, dass sie sich sehr ähneln. Wo man in C++ mit Exceptionschmeisserei in einen alternativen Ausführungspfad verzweigt, tut man dies in C mit Rückgabewerten. Zum Abfangen von Fehlern nimmt man in C if() während in C++ catch()-Anweisungen stehen. Offensichtlich gibt es ausser diesen technischen Feinheiten keinen nennenswerten Unterschied. Ein catch(...) (alle Fehler) in C++ ist leicht ersetzt durch ein if (errorcode < 0). So wie es aussieht, sind Exceptions nicht unbedingt die grosse Bereicherung, die C++ von C abhebt. Es muss also noch was anderes sein. Klassen? Templates vielleicht?

    BTW: OK, die Sache mit den C-Fehlercodes ist flexibler, denn sie macht es uns einfacher Aktionen zu wiederholen und eine feinkörnigere Fehlerbehandlung ist auch möglich. Aber lassen wir diese Haarspalterei.



  • otze schrieb:

    OOP Guy schrieb:

    Und was haben wir jetzt damit bewiesen?

    das mit unregs diskutieren Zeitverschwendung ist.

    Entschuldige bitte, dass ich Dir widersprochen habe, O du großer C++ Meister.



  • @OOP Guy,
    Und nun der Witz des Tages:
    Wie sehen deine Kenntnisse in C++ aus? Wieviele Bücher zu C++ hast du schon gelesen? Seit wie langem programmierst du in C++? Wieviele Programme hast du schon in C++ geschrieben? Wie stark hast du dich mit C++ auseinander gesetzt?

    🤡



  • Clown schrieb:

    Wie sehen deine Kenntnisse in C++ aus?

    Mittelmäßig würde ich sagen. Kann man selber schlecht einschätzen.

    Clown schrieb:

    Wieviele Bücher zu C++ hast du schon gelesen?

    Eins, den Stroustrup.

    Clown schrieb:

    Seit wie langem programmierst du in C++?

    Zuletzt bis vor zwei Jahren, etwa 4 Jahre lang. Seitdem programmierere ich nur noch in C# und C.

    Clown schrieb:

    Wie stark hast du dich mit C++ auseinander gesetzt?

    An Anfang häufig, dann immer weniger. Jetzt garnicht mehr.



  • wayynE schrieb:

    Wie kommt man jetzt von Python auf soziale Komponente?

    Man lernt Python idR nur wenn man sich wirklich dafuer interessiert. Und das ist der eigentliche Punkt gegen C++ in der Kernel Entwicklung. Denn wenn man alle Argumente die genannt werden analysiert (und dabei mal den Schwachfug von OOP Guy aussen vor laesst, da dieser jeglicher grundlage entbehrt) kommt man zu dem Schluss dass nur von schlechtem C++ Code gesprochen wird.

    zB das Problem mit unvorhersehbaren Objektgroessen. Das tritt eben dann auf wenn ich einen shared_ptr in einen Container packe. Mache ich in C garantiert nicht. Dort verwendte ich ja auch intrusive Container.

    Das alles kann man in C++ natuerlich auch machen, nur macht man es meistens aus bequemlichkeit nicht. Weil es auf einem Desktop System eh egal ist, weil wir hier ja von minimalen Unterschieden reden (die im Kernel dann halt doch relevant werden).

    Mit einem verbieten von C++ Code haelt man sich aber die ganzen Anwendungsentwickler vom Hals und lockt die embedded Programmierer an. Genau das was man will.

    Deshalb frage ich nach Python wenn ich einen Programmierer suche. Denn PHP oder Java "kann" schnell mal jemand. Da kann man nur sehr schwer differenzieren. Python Programmierer sind dagegen mehr am Programmieren als an bunten Ergebnissen interessiert. Und das ist was zaehlt.

    @OOP Guy:
    Dein Unwissen tut einfach nur weh 😢



  • Hallo,

    OOP Guy schrieb:

    Ein catch(...) (alle Fehler) in C++ ist leicht ersetzt durch ein if (errorcode < 0). So wie es aussieht, sind Exceptions nicht unbedingt die grosse Bereicherung, die C++ von C abhebt.

    Die Benutzung von Exceptions erlaubt dir gleichzeitig die freie Nutzung des Rückgabewertes. Wenn Du den Rückgabewert für einen Fehler-Code nutzt steht er Dir nicht mehr für die eigentliche Programmlogik zur Verfügung. Außerdem wird ein 'if (errorcode < 0)' immer ausgeführt (der Vergleich kostet also immer CPU-Zeit) eine Exception wird nur dann "ausgeführt" wenn sie auch geworfen wird (kostet also nur im Fehlerfall CPU-Zeit, dann allerdings auch etwas mehr).
    Dein Vergleicht hinkt IMO etwas, klassisches C-Fehlerhandling per Rückgabewert und C++-Exceptions lassen sich nicht einfach so 1:1 austauschen!

    Grüße
    Erik



  • Shade Of Mine schrieb:

    (und dabei mal den Schwachfug von OOP Guy aussen vor laesst, da dieser jeglicher grundlage entbehrt)

    Ich habe mich hier nur über C++ Exceptions ausgelassen und dazu habe ich von Deiner Seite nichts gescheites gelesen.



  • OOP Guy schrieb:

    Nicht ganz. Wenn wir mal die beiden Codeschnipsel vergleichen (C und C++), dann sehen wir, dass sie sich sehr ähneln. Wo man in C++ mit Exceptionschmeisserei in einen alternativen Ausführungspfad verzweigt, tut man dies in C mit Rückgabewerten. Zum Abfangen von Fehlern nimmt man in C if() während in C++ catch()-Anweisungen stehen. Offensichtlich gibt es ausser diesen technischen Feinheiten keinen nennenswerten Unterschied.

    Aha. Sicher, dass Du da nicht etwas vergessen hast? Der Sinn von Exceptions ist doch, die "normale Ausführungslogik" nicht dadurch unleserlich zu machen, indem in jeder zweiten Zeile ein "if (hat_die_letzte_operation_nicht_geklappt)" steht. Bei Exceptions geht's um bessere Trennung von Fehlererkennung und Fehlerbehandlung. Wenn Du Fehler erst sinnvoll "2-3 Ebenen höher" behandeln kannst, würden mich die vielen ifs dazwischen ganz schön stören. Hast das Kapitel anscheinend im Stroustrup übersprungen.

    Es ist wie immer ein Abwägen. Manchmal kann man sie gebrauchen. Und manchmal wäre es Overkill.



  • erik.vikinger schrieb:

    Die Benutzung von Exceptions erlaubt dir gleichzeitig die freie Nutzung des Rückgabewertes. Wenn Du den Rückgabewert für einen Fehler-Code nutzt steht er Dir nicht mehr für die eigentliche Programmlogik zur Verfügung.

    Du kannst den Wertebereich teilen, z.B. alle negativen Werte oder alle mit gesetztem höchsten Bit geben einen Fehlercode an.

    erik.vikinger schrieb:

    Außerdem wird ein 'if (errorcode < 0)' immer ausgeführt (der Vergleich kostet also immer CPU-Zeit) eine Exception wird nur dann "ausgeführt" wenn sie auch geworfen wird (kostet also nur im Fehlerfall CPU-Zeit, dann allerdings auch etwas mehr).

    Dafür verlierst Du CPU Cycles auf der anderen Seite:

    if (something_went_wrong)
       throw (...);
    

    C++ Exceptions sind eine reine Software-Geschichte. Kein Vergleich mit deinen Mikrocontrollern, wo die Hardware Exceptions auslöst.



  • krümelkacker schrieb:

    Aha. Sicher, dass Du da nicht etwas vergessen hast? Der Sinn von Exceptions ist doch, die "normale Ausführungslogik" nicht dadurch unleserlich zu machen, indem in jeder zweiten Zeile ein "if (hat_die_letzte_operation_nicht_geklappt)" steht.

    Wenn Du auf den Fehler regieren willst, brauchst Du ein catch(), das lässt den Code sogar noch unschöner aussehen. Wenn Du einen generellen Fehlerhandler brauchst, der z.B. das Programm beendet, wenn etwas schiefgeht, bekommst Du das in C mit atexit()/exit() hin. Für alles weitere reichen setjmp() und longjmp() völlig aus.



  • Shade Of Mine schrieb:

    wayynE schrieb:

    Wie kommt man jetzt von Python auf soziale Komponente?

    Man lernt Python idR nur wenn man sich wirklich dafuer interessiert.

    Python wird in unserer Firma für alle möglichen Scriptingsachen eingesetzt und es gibt doch auch schon Vorlesungen usw. dafür.



  • OOP Guy schrieb:

    krümelkacker schrieb:

    Aha. Sicher, dass Du da nicht etwas vergessen hast? Der Sinn von Exceptions ist doch, die "normale Ausführungslogik" nicht dadurch unleserlich zu machen, indem in jeder zweiten Zeile ein "if (hat_die_letzte_operation_nicht_geklappt)" steht.

    Wenn Du auf den Fehler regieren willst, brauchst Du ein catch(),

    Ja, und der Gag ist der, dass ich nicht jeden Funktionsaufruf separat in ein try{}catch(){} verpacken muss.

    OOP Guy schrieb:

    das lässt den Code sogar noch unschöner aussehen.

    Ja, wenn Du sie falsch benutzt.

    OOP Guy schrieb:

    Wenn Du einen generellen Fehlerhandler brauchst, der z.B. das Programm beendet, wenn etwas schiefgeht, bekommst Du das in C mit atexit()/exit() hin. Für alles weitere reichen setjmp() und longjmp() völlig aus.

    Ich hoffe, ich muss nie mit Dir zusammen arbeiten.



  • krümelkacker schrieb:

    OOP Guy schrieb:

    krümelkacker schrieb:

    Aha. Sicher, dass Du da nicht etwas vergessen hast? Der Sinn von Exceptions ist doch, die "normale Ausführungslogik" nicht dadurch unleserlich zu machen, indem in jeder zweiten Zeile ein "if (hat_die_letzte_operation_nicht_geklappt)" steht.

    Wenn Du auf den Fehler regieren willst, brauchst Du ein catch(),

    Ja, und der Gag ist der, dass ich nicht jeden Funktionsaufruf separat in ein try{}catch(){} verpacken muss.

    Wie möchtest Du denn die Exception fangen, ohne try/catch?

    krümelkacker schrieb:

    OOP Guy schrieb:

    Wenn Du einen generellen Fehlerhandler brauchst, der z.B. das Programm beendet, wenn etwas schiefgeht, bekommst Du das in C mit atexit()/exit() hin. Für alles weitere reichen setjmp() und longjmp() völlig aus.

    Ich hoffe, ich muss nie mit Dir zusammen arbeiten.

    Zu sehr C++ geschädigt? Keine Angst, das würde ich Dir schon abgewöhnen.







  • OOP Guy schrieb:

    Clown schrieb:

    Wie sehen deine Kenntnisse in C++ aus?

    Mittelmäßig würde ich sagen. Kann man selber schlecht einschätzen.

    (Tip: *Ein* Geisterfahrer?! Nein, das sind doch hunderte!)

    OOP Guy schrieb:

    Clown schrieb:

    Wieviele Bücher zu C++ hast du schon gelesen?

    Eins, den Stroustrup.

    Das ist nicht viel.

    OOP Guy schrieb:

    Clown schrieb:

    Seit wie langem programmierst du in C++?

    Zuletzt bis vor zwei Jahren, etwa 4 Jahre lang. Seitdem programmierere ich nur noch in C# und C.

    Du bist nicht der Erste, der vier Jahre lang C-Code in den C++-Compiler gehauen hat.
    Aber VIER Jahre lang und das mit nur einem Buch?
    Da muß ich ja jetzt denken, daß Du in der Zweiklassengesellschaft zur Oberschicht, den ausgelernt geborenen Embedded-Programmierern gehörst.


Anmelden zum Antworten