Allgemeine Frage untersschied zwischen C und C++



  • Momentan bin ich dabei C etwas intensiver zu lernen, wenn ich die Klausuren hinter mir habe, gehts weiter mit Java finde auch Java etwas leichter, da ich da schon etwas Erfahrung habe. 😃



  • pointercrash() schrieb:

    hustbaer schrieb:

    Das is ja geil 😃
    Was ähnliches gab's bei Turbo-Pascal wenn ich mich richtig erinnere, allerdings nicht mit einer so "kurzen" Zahl...
    Oder war's Borland-C?
    Hmmm...

    Naja, wenn die Runtime buggy ist, kann das durchaus passieren. Mein Bruder hatte 'nen ST und nach zwei Versuchen, mit ST-Basic was zu machen mußte GfA- Basic her.
    Vermutlich meinst Du aber den unit CRT- Fehler von TP. Die mußte man includen, sonst keine Bildschirm- Ein/Ausgabe. Weil die Borlander aber zur Erstellung eines Softtimers auf die "geniale" Idee kamen, die Maschine mit einer Leerschleife auszubenchen 😮 , gab's auf schnelleren Prozessoren als 233er(MHz) einen Unterlauf bzw. Division by zero- Error == crash! Da das gleich zu Beginn stattfand, hatte man zunächst keine Möglichkeit der Umgehung, außer das in der Win-DOS- Box laufen zu lassen, hat aber auch nicht lange geholfen. Später wurde das Teil von anderen Leuten gepatcht.
    Aber auch mit C- Compilern hatte ich so meinen Spaß. Ein frühes Keil MCS-51- C strotzte nur so vor Macken und IAR hat mich z.B. mit einem schweren Bug erstmal ewig sitzen lassen und dann für das "Upgrade" die Hand so weit aufgehalten, daß ich dankend verzichtet habe, weil das Projekt längst in ASM umgesetzt war.
    Also, es liegt nicht nur an der Sprache und dem Programmierer, sondern auch an deren Implementation.

    Nönö, das war schon auch sowas ala "printf("%f", bestimmterWert)" -> Crash.
    Ziemlich bizarr.
    Bin mir jetzt fast sicher dass dass Borland C war, und dass die Funktion printf war. Naja, egal 🙂

    BTW: der "DICE C" am Amiga war lustig (=extrem buggy). Dafür war der wenigstens gratis. Watcom C/C++ hat auch immer wieder lustige Sachen gemacht. Und nichtmal MSVC 9 hat einen komplett fehlerfreien Code-Generator. Leider 😞
    Bin aber bei MSVC 6+ niemehr selbst über einen Fehler gestolpert, d.h. die Situationen in denen die falschen Code erzeugen sind gottseidank sehr speziell, und kommen nur selten vor.



  • ^^ zu buggy compilern: http://www.imagecraft.com/ (der icc12) hat einmal den code: array[index++]; nicht richtig umgesetzt. musste ich array[index]; index++; daraus machen, damit es ging. hab stundenlang versuch, nen fehler irgendwo im code zu finden. schrottcompiler sind schon allein deshalb nicht lustig, weil man immer zuerst bei sich selbst nach fehlern sucht. dass ich daraufhin diesen compiler nicht mehr verwendete (stattdessen den von freescale), versteht sich von selbst.
    🙂



  • hustbaer schrieb:

    Bin aber bei MSVC 6+ niemehr selbst über einen Fehler gestolpert, d.h. die Situationen in denen die falschen Code erzeugen sind gottseidank sehr speziell, und kommen nur selten vor.

    Unter MSVC 6 bin ich noch recht häufig über Fehler gestolpert, vorwiegend aber deshalb weil ich beruflich erst mit diesem zu tun bekam, als ich persönlich schon mit dem 2003/2005 gearbeitet habe (Beginnt schon bei dem Gültigkeitsbereich von Zählervariablen in einer for-Schleife). Ab da ist mir glaube ich nur einmal unter dem 2003 noch ein Fehler direkt aufgefallen.



  • @asc:
    Standard-non-compliance, Abstürze beim Compilieren etc. ja, das hat man beim VC6 ja dauernd.

    Ich meinte aber Fehler im Code-Generator/Optimizer, so dass er mir "silently" falschen Code ausspuckt.

    Ich weiss schon dass der VC6 da auch Fehler hat, gibt ja z.B. extra nen komischen Workaround in boost::shared_ptr eben wegen einem VC6 Codegenerator/Optimizer-Bug, aber selbst drübergestolpert bin ich wie gesagt noch nie.



  • abros schrieb:

    Momentan bin ich dabei C etwas intensiver zu lernen, wenn ich die Klausuren hinter mir habe, gehts weiter mit Java finde auch Java etwas leichter, da ich da schon etwas Erfahrung habe.

    jedenfalls sparst du so den fruchtlosen umweg über c++. du hattest in deinem ersten posting hardware-programmierung erwähnt - das geht nicht mit Java (bevor jetzt einige meckern werden: ich meine 'direkte hardware-programmierung', ohne irgendwelche libraries usw. zu benutzen).
    🙂



  • +fricky schrieb:

    kennt nicht einer ein brauchbares smalltalk-system für windows, gleich mit IDE dabei und so?
    🙂

    IBMs VisualAge SmallTalk, aber das ist Enterprise Software …



  • Fricky wollte ja nicht gleich viel Geld ausgeben.

    Obendrein hab' ich gegen IBM- Compiler so meine Vorbehalte. Ich hab' mal bei einer Promo- Aktion IBMs Visual Age for C++ und Visual Age for Basic gekauft. Das Zeug war gemäß IBM- Nomenklatur ("it's not a bug, ...") so "fully featured", daß man damit gar nichts anfangen konnte 😡 . Besonders die C++ - IDE hatte die unpraktische Eigenschaft, sich immer wieder mal die komplette Projektdatenbank zu shreddern und dann abzustürzen 👎 .
    Auch das Basic hatte jede Menge Macken und war so entsetzlich langsam 🙄 , daß MS VB3 daneben fast rasend schnell wirkte. Angeblich war VA4Basic übrigens in Smalltalk geschrieben, ich kann aber nicht beschwören, daß das stimmt.

    Also, diese Promo- Aktion war eher so abschreckend, daß ich jegliches Interesse an IBM- Zeugs verloren habe. Später gab's dann zwar Patches, die fast so groß wie die Originalpakete waren, aber da hatte ich nichtmal mehr Lust, sie einzuspielen. Ich weiß nicht, ob sich das allgemein auf IBM- Zeugs übertragen läßt, aber die zwei Pakete waren definitiv Vollscheißdreck (sorry, finde keine freundlichere Bezeichnung, die der Produktqualität angemessen wäre).



  • pointercrash() schrieb:

    Fricky wollte ja nicht gleich viel Geld ausgeben.

    ich nehm's auch gern, ohne geld auszugeben. bin grosser filesharing und warez-fan.
    ~john: danke für den tip
    🙂



  • pc():
    ich hab' vor jahren mal mit DB/2 rumgefummelt. dabei musste ich patches in der reihenfolge 1,2,4,3 installieren. in der richtigen sequenz hätte patch 4 wieder bugs eingespielt, die 3 beseitigt hatte. ok, aber auch wenn IBM, was software angeht, nicht so der knüller ist, in puncto hardware sind sie spitze. ich schwöre auf IBMs notebooks. selbst IBM-notebooks, die aus der qualitätskontrolle geflogen sind und als noname-produkte billiger verkauft werden, sind um längen gediegener als beispielsweise irgendwelcher dell-dreck (bei dem dir nach 'nem 1/2 jahr die tasten rausfallen, das wäre eher was für unseren bärigen freund mit chronischem atemwegsleiden (siehe dazu die hardwarequalitäts-threads in 'rund um den PC')).
    🙂



  • +fricky schrieb:

    pc():
    ich hab' vor jahren mal mit DB/2 rumgefummelt. dabei musste ich patches in der reihenfolge 1,2,4,3 installieren. in der richtigen sequenz hätte patch 4 wieder bugs eingespielt, die 3 beseitigt hatte.

    Ich hab' genug Zeit mit OS/2 und dem Warp Server vertrödelt und kenne das Prinzip der gepatchten Patchdisketten noch. Wenn's mal lief, war das System kaum umzuhauen, der Weg dahin z.T. einfach unmenschlich gestaltet.

    +fricky schrieb:

    ich schwöre auf IBMs notebooks. selbst IBM-notebooks, die aus der qualitätskontrolle geflogen sind und als noname-produkte billiger verkauft werden, ...

    ... und gibt's nimmer. Das Zeug heißt jetzt Lenovo und ist bis auf die immer noch gute Tastatur der gleiche Chinesenscheißmüll wie von Acer, Asus & Co. Der Laptop eines Bekannten war in 1 1/2 Jahren häufiger in Reparatur als bei ihm zuhause. Lang haben sie ja nicht gebraucht, den guten Ruf anzukratzen ...

    +fricky schrieb:

    ... das wäre eher was für unseren bärigen freund mit chronischem atemwegsleiden (siehe dazu die hardwarequalitäts-threads in 'rund um den PC')). 🙂

    Jetzt kannste ihm ja den Tip geben 😉 . Leider hatte ich meinem Bekannten zu Lenovo geraten wg. IBM und so. Im Sinne einer zu erhaltenden Freundschaft sollte man sich generell vor Tips hüten ...



  • pointercrash() schrieb:

    +fricky schrieb:

    ich schwöre auf IBMs notebooks. selbst IBM-notebooks, die aus der qualitätskontrolle geflogen sind und als noname-produkte billiger verkauft werden, ...

    ... und gibt's nimmer. Das Zeug heißt jetzt Lenovo und ist bis auf die immer noch gute Tastatur der gleiche Chinesenscheißmüll wie von Acer, Asus & Co. Der Laptop eines Bekannten war in 1 1/2 Jahren häufiger in Reparatur als bei ihm zuhause. Lang haben sie ja nicht gebraucht, den guten Ruf anzukratzen ...

    Für die N- und R-Serien mag das zutreffen - eben die klassische Erweiterung der Palette nach unten -, aber die T-Serie ist eigentlich kaum anders als die alten IBM-Notebooks.



  • audacia schrieb:

    Für die N- und R-Serien mag das zutreffen - eben die klassische Erweiterung der Palette nach unten -, aber die T-Serie ist eigentlich kaum anders als die alten IBM-Notebooks.

    Ne, ist leider wirklich ein klassisches Stinkpad (frag' mich jetzt bitte nicht nach dem Typ), mit Business- Service und so. Aber der klappt imerhin noch gut, was auch bitter nötig ist nach dem zweiten Mainboardtausch, mit dem Display war was, der Akku wurde zu Anfang getauscht und irgendwas mit dem DVD- Röster wird als Dauermacke nie behoben.
    Ich glaube fast, solche Sachen erledigen sich dann von selbst, wenn der entnervte Kunde wirklich Frisbee damit spielt.



  • pointercrash() schrieb:

    ... nach dem zweiten Mainboardtausch, mit dem Display war was, der Akku wurde zu Anfang getauscht und irgendwas mit dem DVD- Röster wird als Dauermacke nie behoben.

    Das klingt sehr nach einer Einzelerfahrung. Mein T500 hat keine Hardware-Macken, wenn man von dem gelegentlich leicht dysfunktionalen Fingerprint-Reader absieht - aber das ist legitim, denn über den habe ich mal ein Glas Wasser geschüttet 🙂

    Vielleicht habe ich auch nur Glück, und dein Fall ist die Regel. Dann ist Lenovo aber in absehbarer Zeit gleichfalls dysfunktional.



  • audacia schrieb:

    Vielleicht habe ich auch nur Glück, und dein Fall ist die Regel. Dann ist Lenovo aber in absehbarer Zeit gleichfalls dysfunktional.

    Ist ja nicht mal mein Fall, nur insofern, als daß ich einem Kumpel gesagt hab' ist ja quasi IBM, guck Dich dort in der Profireihe um. Sein vorheriges Sony- Schleppi war aber noch schlimmer, da gabs massive Probs mit dem Service.
    Einfach den nächsten, jährlichen Kundenzufriedenheitsreport der c't genau lesen. Tendenziell weiß man da dann halbwegs Bescheid.

    EDIT: Achso, ja, Scheiße, mein Sony- Laptop, das einzige Laptop, das ich je hatte, starb nach 6 Monaten den Akkutod. Nix Kulanz, knapp fünfhundert Deutschmarks wollten die für'n Ersatz haben. Die Geschichte hab' ich aber von anderen Marken ähnlich um 00/01 rum gehört und nie wieder Laptops angeschaut.



  • +fricky schrieb:

    ich bin eher der ergebnisorientierte typ, und keiner,

    Man kann sich in C++ viel Arbeit sparen, die man mit C++ von Hand immer wieder machen muß. Und vermeidet so viele mögliche Fehlerquellen. Die Makros in C sind ein schlechter Versuch das Problem anzugehen, aber als wirklich geglückt kann man das nicht bezeichnen. Templates in C++ lassen einem viel Arbeitszeit sparen, wenn man damit umzugehen weiß. Allerdings sind gerade die Fehlermeldungen bei falscher Nutzung von Templates in ihrer Undurchsichtigkeit wohl kaum mehr zu überbieten. (Mit der neuen ISO Norm wird es daher Abhilfe geben.) Ein weiser Rat ist bei C++ Programmieren, daß man möglichst auf C Sprachmittel verzichten sollte, da man so nicht viel gewinnt, dafür die Fehlerquellen auf C Niveau hält, ergo man gleich C programmieren kann. Für versierte C-Programmierer ein verführerisches Gift, statt C++ gibt es bei denen meist nur C with Classes.

    Andere Sprachen sind hier eindeutig im Vorteil z.B. Ada, aber mit Algol artigen Sprachen willst Du ja auch nichts zu tun haben.



  • ~john schrieb:

    +fricky schrieb:

    ich bin eher der ergebnisorientierte typ, und keiner,

    Man kann sich in C++ viel Arbeit sparen, die man mit C von Hand immer wieder machen muß.

    zum beispiel?

    ~john schrieb:

    Andere Sprachen sind hier eindeutig im Vorteil z.B. Ada, aber mit Algol artigen Sprachen willst Du ja auch nichts zu tun haben.

    ich mach manchmal VHDL, ist ja ADA-ähnlich.
    🙂



  • +fricky schrieb:

    zum beispiel?

    Template Meta Programming, aber das ist für dich ja so etwas wie "the dark arts" der C++ Programmierung. OOP, Exceptions werden direkt unterstützt, das spart viel Handarbeit gegenüber C ein. Leider habe ich schon viel zu viel C Code gesehen bei denen das Fehlerhandling sehr kreativ mit exit oder abort gelöst war. Fehlerhandling ist scheinbar etwas für Weicheier.



  • ~john schrieb:

    +fricky schrieb:

    zum beispiel?

    Template Meta Programming, aber das ist für dich ja so etwas wie "the dark arts" der C++ Programmierung.

    ja, so wie's in C++ gemacht wird, ich es total furchtbar. meta programming an sich, halte ich für eine gutes und brauchbares konzept. ich finde nur, dass dafür eigene tools verwendet werden sollten und kein mega-compiler, der einem erlaubt im code die verschiedensten ansätze wild zu vermischen. es gibt aber auch ausnahmen, wo sich metaprogramming-features gut in die sprache integrieren (ich glaube lisp ist so ein kandidat).

    ~john schrieb:

    ...Exceptions werden direkt unterstützt, das spart viel Handarbeit gegenüber C ein. Leider habe ich schon viel zu viel C Code gesehen bei denen das Fehlerhandling sehr kreativ mit exit oder abort gelöst war.

    sowas beklopptes wie C++ exceptions z.b. könnte ich in meinem tätigkeitsfeld überhaupt nicht gebrauchen. exit, abort, oder nicht abgefangene exceptions, die ein programm killen, overhead eines runtime-systems usw. sind nicht akzeptabel. zum einen muss ich oft sehr diffenziert auf fehler reagieren, direkt an dem punkt, an dem der fehler auftritt. das geht am effektivsten, ohne dass in einen alternativen auführungspfad gehüpft wird, oder durch stack-unwinding der kontext zerstört wird. ausserdem müsste ich c++ exceptions irgendwie mit prozessor-exceptions, interrupts und eventuell einem RTOS in einklang bringen. dazu kämen noch c++'s hausgemachte probleme wie z.b. das vermeiden von exceptions in destruktoren und konstruktoren bzw. in sämtlichen code-teilen, die von einem destruktor oder konstruktor aufgerufen werden könnten. langer rede kurzer sinn: den c++ exception-schwachsinn werde ich mir nicht geben.
    🙂



  • +fricky schrieb:

    sowas beklopptes wie C++ exceptions z.b. könnte ich in meinem tätigkeitsfeld überhaupt nicht gebrauchen

    Wenn du Microcontroller programmierst, habe ich dafür Verständnis, aber was ist an den C++-Exceptions sonst so anders als z.B. in Java?

    +fricky schrieb:

    exit, abort, oder nicht abgefangene exceptions, die ein programm killen

    ... kann man mit entsprechenden Handlern ausstatten.

    +fricky schrieb:

    zum einen muss ich oft sehr diffenziert auf fehler reagieren, direkt an dem punkt, an dem der fehler auftritt. das geht am effektivsten, ohne dass in einen alternativen auführungspfad gehüpft wird

    Ja, in so einem Fall ist die C-Variante der Fehlerbehandlung sicher zu bevorzugen. Aber das ist ja nun nicht eine übliche Situation für den durchschnittlichen Anwendungsentwickler.

    +fricky schrieb:

    oder durch stack-unwinding der kontext zerstört wird

    Fordert der Standard eigentlich, daß der Kontext bereits beim Exception-Unwinding zerstört wird? Oder ist das nur eines der Implementationsdetails?

    +fricky schrieb:

    dazu kämen noch c++'s hausgemachte probleme wie z.b. das vermeiden von exceptions in destruktoren und konstruktoren bzw. in sämtlichen code-teilen, die von einem destruktor oder konstruktor aufgerufen werden könnten.

    Gegen Exceptions in einem Konstruktor spricht nichts, was mir geläufig wäre.


Anmelden zum Antworten