Hallo Besucher, der Thread wurde 13k mal aufgerufen und enthält 93 Antworten

letzter Beitrag von Zirias/Excess am

C Frage ist folgendes zulässig?

  • Dafür nutze ich dann lieber typeinfo/typeid anstatt eines Macros.


    Dieser Quatsch war schon damals nicht ganz richtig, und ist fast so alt wie K&R :D


    "Dieser Quatsch" kommt vom Erfinder Sprache selbst... wenn er falsch liegt - aus welchen Gründen auch immer - ist es eben so.


    Aber einem Neuling wirst Du mit dem Totschlagargument "So ein Quatsch" nicht überzeugen.


    Wie gesagt: Du hast Deine gefestigte Meinung und es ist gut, das Du intellektuell in der Lage bist Dir eine zu bilden und gut zu begründen.
    Aber alles andere als Quatsch abzutun halte ich für eine falsche Einstellung.


    Wenn Stroustrup es als "Superset" sieht bzw. beabsichtigt hat es so zu designen, ist das eine klare Aussage. Und "aus versehen" hat er
    C++ sicher nicht entwickelt. Sicher ist nicht alles perfekt und es gibt (aus meiner Sicht!) ein paar Unzulänglichkeiten.
    Aber es ist utopisch zu glauben, das eine Person oder ein ganzes Standardisierungskomitee im ersten Anlauf einen perfekten Entwurf
    hinbringt. Sehr wahrscheinlich ist niemals perfekt!


    Aber die Sprache entwickelt sich weiter und es bleibt eben jedem selbst überlassen, ob er auf dem alten Standard(?) "C"
    weiter macht oder sich der Weiterentwicklung C++ und neuen Ideen gegenüber öffnet.


    Ich bin (zu?) alt... und mein Altersstarrsinn greift langsam in vielen Bereichen :D ; aber im Punkt C++ bin ich noch gewillt
    hier neues zu erlernen.

  • "Dieser Quatsch" kommt vom Erfinder Sprache selbst... wenn er falsch liegt - aus welchen Gründen auch immer - ist es eben so.


    Aber einem Neuling wirst Du mit dem Totschlagargument "So ein Quatsch" nicht überzeugen.

    Die Argumente stehen alle bereits im Thread, sowohl von @ogd als auch von mir gab es auch ein Beispiel.


    Ja, Stroustrup hat hier irreführenden Quatsch geschrieben.

  • Die Argumente stehen alle bereits im Thread, sowohl von @ogd als auch von mir gab es auch ein Beispiel.
    Ja, Stroustrup hat hier irreführenden Quatsch geschrieben.


    Ein Geisterfahrer? Nein... tausende!? :bgdev


    Und wenn es nur eine Schnittmenge ist: Seine Intention war es als Obermenge zu designen - auch wenn Ihm das wohl nicht gelungen ist.

  • Ein Geisterfahrer? Nein... tausende!? :bgdev

    Mal ganz ehrlich: Nennst du das ein Argument?


    Stroustrups Aussage war nachweisbar schon damals falsch dank der feinen Unterschiede, die es schon damals gab, und die durchaus zu ernsthaften Bugs führen konnten. Heute ist es nur noch blühender Unsinn, C hat eine ganze Reihe an Features (explizite initializer, variable-length arrays, threading, generic selection, und viele mehr) die mit C++ komplett inkompatibel sind.


    Und wenn es nur eine Schnittmenge ist

    Das ist näher an der Wahrheit, aber dann muss man essentielle Dinge wie Character-Literale weglassen, ohne die die Sprache nicht vollständig ist. Deren Typ ist nämlich ein anderer in C++ als in C.

  • Mal ganz ehrlich: Nennst du das ein Argument?
    Stroustrups Aussage war nachweisbar schon damals falsch dank der feinen Unterschiede, die es schon damals gab, und die durchaus zu ernsthaften Bugs führen konnten. Heute ist es nur noch blühender Unsinn, C hat eine ganze Reihe an Features (explizite initializer, variable-length arrays, threading, generic selection, und viele mehr) die mit C++ komplett inkompatibel sind.


    Das war nicht als Argument gedacht! Aber ich habe während Du Deine Antwort getippt hast einen erläuternden Satz dazu geschrieben.

  • Zitat von zrs1

    ... Dieser Quatsch war schon damals nicht ganz richtig...
    ... Heute ist es nur noch blühender Unsinn...


    Sorry... das ist (k)eine Art und Weise zu argumentieren, mit der ich nicht viel anfangen kann. Bin dann mal raus! :weg:


    Muß mich 3.5m LOC blühenden Unsinn kümmern.

  • Das war nicht als Argument gedacht! Aber ich habe während Du Deine Antwort getippt hast einen erläuternden Satz dazu geschrieben.

    Und darauf bin ich auch noch eingegangen.


    Es ist in der Tat so, der Irrglaube, C++ sei einfach eine "Obermenge" von C, ist weit verbreitet (ja, da sind deine tausende Geisterfahrer, da fällt mir dann auch noch ein Spruch mit Exkrementen und Fliegen ein, aber lassen wir das). Stroustrup selbst hat seinen Anteil daran.


    In der Praxis heißt das, man muss sehr aufpassen, wenn man C und C++ mischt. Es ist gut machbar, aber man sollte wissen, was man tut.


    Wenn man sich aber für eine Sprache entscheidet ist es sicher am vernünftigsten, auch den üblichen Stil dieser Sprache zu verwenden. Beim Stil gibt es immer viele Freiheiten und Meinungen, aber gerade die Frage, wohin in einer Pointer-Deklaration der Asterisk gehört (mit der diese ganze Diskussion losgeht) ist für beide Sprachen ziemlich eindeutig beantwortet, und zwar ebenfalls unterschiedlich ;)

  • Stroustrup selbst hat seinen Anteil daran.


    In seiner Antwort zu "Is C a subset of C++?" rudert Stroustrup ja etwas zurück:


    Zitat

    Is C a subset of C++?
    In the strict mathematical sense, C isn't a subset of C++. There are programs that are valid C but not valid C++ and even a few ways of writing code that has a different meaning in C and C++.

  • Diese Aussagen sind belegt, aber das hast du ja geflissentlich weggeschnitten. Schade. Beleidigt sein ist natürlich auch immer eine Option ;)

    Ich bin nicht beleidigt... warum auch?


    Wie bereits oben geschrieben: Du hast Deine und ich habe meine Meinung zu dem Thema.
    Ich habe meinen Standpunkt ausreichend dargelegt... Du auch. So what?
    Wenn meinen Standpunkt mal ändere, dann zumindest nicht durch Deine Art&Weise zu argumentieren.
    Damit ist das Thema für mich eben beendet, weil es mich langweilt.

  • Deine Meinung ist also, die Aussage, C++ sei eine Obermenge von C, sei KEIN "Quatsch"? ;)


    weil es mich langweilt.

    Fällt irgendwie gar nicht auf ...


    Deshalb sollte man besser von einer Schnittmenge als von einer Obermenge sprechen. Dafür gibt es auch den Begriff "Clean-C". Das sind C-Programme die von C++- und reinen C-Compilern gleich interpretiert werden.

    Das heißt dann auch, dass der Code nie und nimmer etwas über den Typ eines Character-Literals annehmen darf, richtig? :)


    Der Begriff ist mir jedenfalls neu, aber es ergibt Sinn: Solchen Code braucht man überall da, wo man C und C++ zusammenbringen will, quasi als "glue".

  • Der Begriff ist mir jedenfalls neu, aber es ergibt Sinn: Solchen Code braucht man überall da, wo man C und C++ zusammenbringen will, quasi als "glue".


    Im "C: A Reference Manual" von Harbison & Steele taucht er auf und wird in "Softwaretechnik in C und C++" von Isernhagen wieder aufgegriffen:


    Zitat

    Aus Gründen der Portierbarkeit, der Zukunftsicherheit, der Robustheit und der Erweiterbarkeit empfiehlt es sich sehr, bei der Entwicklung von C-Programmen nur Clean-C zu verwenden, d.h. nur solche Sprachmittel, die auch Bestandteil von C++ sind. Die Einschränkungen sind gering, ... Diese Strategie ermöglicht einen gleitenden Übergang von C nach C++.

  • Variante 2 -> Absolutes No-Go! Sieht aus wie Multiplikation


    So wird das in dem recht bekannten Lehrbuch "C als erste Programmiersprache" benutzt:


    Zitat

    Beispiele für die Definition von Pointervariablen sind:

    Code
    1. int * pointer1;
    2. float * pointer2;


    Bei sizeof bin ich auf der Klammerfraktion, weniger aufgrund der Frage ob's eine Funktion ist oder nicht, sondern wegen der Klarheit der Rangfolge in Verbindung mit weiterenn Operationen. Ja, es gibt eine Rangfolge der Operatoren, aber im Ernstfall tut eine Klammer zuviel weniger weh als eine zu wenig...


    Gibt es Tools, die überflüssige Klammern in Ausdrücken entfernen oder hinzufügen können? Mit indent oder astyle geht das mWn nicht.