Programmiersprachen C und C++



  • Man muss sowieso C können, um C++ können zu können.
    C ist sehr einfach, eine Art Highlevel-Assembler.



  • Ethon schrieb:

    Man muss sowieso C können, um C++ können zu können.

    Merkwürdig, das ich schon über 10 Jahre ohne C und Assembler auskomme (letzteres habe ich in Ansätzen gelernt).



  • Nur weil du C nicht explizit gelernt hast, bedeutet das nicht, dass du nicht 97% der Sprache kannst. Und darauf würde ich durchaus wetten.



  • cooky451 schrieb:

    Nur weil du C nicht explizit gelernt hast, bedeutet das nicht, dass du nicht 97% der Sprache kannst. Und darauf würde ich durchaus wetten.

    Ich kenne von C weit weniger als die von dir angegebenen Prozente, nämlich weitgehend nur die Teile, die sich direkt überlappen (viele grundlegende Datentypen, Schleifen und Abfragen z.B.). Ich kenne die C-Header fast ausschließlich in den Teilen bei denen kein C++ Ersatz existiert (Was nur ein geringer Prozentsatz ist). Und vor allem: Ich habe nie den C-Stil verinnerlicht.

    Und die oben genannten Teile stehen in jeden C++ Einstiegsbuch, da muß man sich nicht erst in C für einarbeiten.

    Nur weil es eine Überschneidung gibt, heißt es nicht das man die andere Sprache lernen muß. Wenn man wirklich C lernt, muß man anschließend sogar an vielen Stellen umlernen, wie das Forum bei vielen Schülern nur zu gut beweist.

    Mit euren Argumenten müsste man um z.B. Java oder C# zu lernen eigenlich Maschinencode, dann Assembler, C und C++ lernen.



  • asc schrieb:

    Ethon schrieb:

    Man muss sowieso C können, um C++ können zu können.

    Merkwürdig, das ich schon über 10 Jahre ohne C und Assembler auskomme (letzteres habe ich in Ansätzen gelernt).

    Wenn du das C Subset nicht beherrschst, dann wird du wohl kaum C++ können, da es gut die Häfte der Sprache ist, unter dem objektorientierten Überbau.
    (C können != die C-Standardbibliothek kennen)

    Wer mit einer C-API nicht arbeiten kann, versteht wohl kaum C++ in Gänze.



  • Ethon schrieb:

    asc schrieb:

    Ethon schrieb:

    Man muss sowieso C können, um C++ können zu können.

    Merkwürdig, das ich schon über 10 Jahre ohne C und Assembler auskomme (letzteres habe ich in Ansätzen gelernt).

    Wenn du das C Subset nicht beherrschst, dann wird du wohl kaum C++ können, da es gut die Häfte der Sprache ist, unter dem objektorientierten Überbau.
    (C können != die C-Standardbibliothek kennen)

    Wer mit einer C-API nicht arbeiten kann, versteht wohl kaum C++ in Gänze.

    Das von dir genannte Subset lernt man aber auch, ohne C zu lernen, da es Teil von C++ ist.



  • TyRoXx schrieb:

    ob C eine geeignete Vorstufe beim Lernen von C++ ist. Und das ist es definitiv nicht.

    Das Thema hat sich durch wueste Behauptungen verschoben: http://www.cplusplus.com/reference/clibrary/

    Merkwürdig, das ich schon über 10 Jahre ohne C und Assembler auskomme

    Ja, du hast noch nie einen Signal-Handler geschrieben, eine Funktion wie time aufgerufen oder assert , memset , ... benutzt.

    weitgehend nur die Teile, die sich direkt überlappen ... Ich kenne die C-Header fast ausschließlich in den Teilen bei denen kein C++ Ersatz existiert (Was nur ein geringer Prozentsatz ist). Das von dir genannte Subset lernt man aber auch, ohne C zu lernen, da es Teil von C++ ist.

    Du verstehst nicht. Dieses Subset ist fast ganz C also lernt man damit C. Das du anscheinend nie benutzt oder gebraucht hast, if-Abfrage und while/for-Schleifen sind dir also fremd ... und der C-Prefix der Header ist eine Konvention damit man die Funktionen schoen im std-Namensraum hat, es sind trotzdem C-Funktionen.

    Ich habe nie den C-Stil verinnerlicht.

    Was auch immer der C-Stil ist.



  • cooky451 schrieb:

    f.-th. schrieb:

    Ach so. Das C++ Normenkomitee hat eigentlich vor beim nächsten Standard C++ gründlich zu reformieren. Schauen wir mal was da kommt und wer sich durchsetzt oder auch nicht.

    Echt? Hast du dazu eine Quelle? Zeit wär's ja mal. Wenn die mir beim nächsten mal wieder keine Module und Concepts geben schreib ich die Sprache ab. (Oder auch nicht, mangels Alternativen.. 🙄 )

    Es gibt derzeit 3 Kandidaten: Concepts, Module und static if. Eines davon wird ziemlich sicher kommen, allerdings wollen die nur ein "großes Sprachfeature" einbauen. Für mehr wäre angeblich nicht genügend Zeit.

    Ich würde eigentlich alle 3 Features gerne in der Sprache sehen. Keine Ahnung, welches der drei mir am wichtigsten ist.



  • Btw.: Warum soll das in C++ ungueltig sein?

    int *p = malloc(sizeof(int));
    


  • Weil sich void* nicht implizit nach T* konvertieren lässt. 😉



  • Ethon schrieb:

    Wenn du das C Subset nicht beherrschst, dann wird du wohl kaum C++ können, da es gut die Häfte der Sprache ist, unter dem objektorientierten Überbau.

    Das Problem bei solchen Diskussionen ist, dass es immer nur die Sprach- und Bibliotheksmittel sind, die verglichen werden. Das alleine macht aber noch keine Sprache aus, wichtig sind zudem gängige Idiome und Techniken (Stil). Und eben genau diese unterscheiden sich stark zwischen C und C++, von Subset kann oft keine Rede sein.

    Beispielsweise denke ich, dass einige C++-Programmierer Mühe hätten, eine objektorientierte C-API zu designen. An erster Stelle die, welche OOP in C generell für unmöglich halten.

    314159265358979 schrieb:

    Es gibt derzeit 3 Kandidaten: Concepts, Module und static if.

    static if hat mich bis jetzt am wenigsten überzeugt. Einige Features, die mit static if möglich werden, können mit Konzepten schöner gelöst werden, z.B. Template Constraints.

    template <typename RandomAccessIterator>
    void sort(RandomAccessIterator first, RandomAccessIterator last)
    if (is_random_access_iterator<It>::value)
    

    vs.

    template <RandomAccessIterator Itr>
    void sort(Itr first, Itr last);
    

    Das eigentliche static if {} wäre zwar vielleicht praktisch, aber so sehr habe ich mich nicht danach gesehnt. Andere Sprachmittel haben für mich viel höhere Stellenwerte...



  • f.-th. schrieb:

    Der Beitragersteller schreibt doch etwas von Dozenten.
    Also scheint er eine Schule oder Uni zu besuchen.
    Besteht da eine zeitliche Vorgabe Prüfungen in C oder C++ zu bestehen?
    Akzeptiert der Prüfer auch Quelltext, der nicht seinem speziellen Stil entspricht?

    Also mein Dozent ist ein Verfechter des C++ nach dem Prinzip "C mit cout und Klassenprogrammierung".

    Ich muss C++ "nur" soweit beherrschen, dass ich Klassen programmieren kann.

    Also stehen eure Aussagen jetzt der Aussage meines Dozenten gegenüber.

    Wem soll ich jetzt glauben?

    Euch, die sagen, dass z. B. "using namespace std;" keine schöne C++ Programmierung ist oder meinem Dozenten, der es so lesen will.

    Ich persönlich wäre für Letzteres, da ich nicht riskieren will, in der noch ausstehenden Prüfung zum staatlich geprüften Elektrotechniker eine schlechte Note zu bekommen ...

    Ich hoffe, ihr versteht meine Zwickmühle.

    Gruß



  • knivil schrieb:

    Btw.: Warum soll das in C++ ungueltig sein?

    Btw.: Wie häufig wird man dies einsetzen? Und falls man es benötigt, kann man es noch immer lernen. malloc habe ich jedenfalls nur einmal eingesetzt, als ich mich mit einigen Interna auseinander gesetzt habe, die man für das Sprachverständnis von C++ aber nicht unbedingt braucht.

    Wobei mein ehemaliger Programmierchef damit rumgeworfen hat, ohne zu verstehen das viele der Stellen, an denen er es eingesetzt hat sogar zu undefinierten Verhalten führten (die "Programmstabilität" *hust* kam auch nicht von ungefähr). Ebenso meinte er alles selbst schreiben zu müssen, weil ja die C++ Standardbibliothek so langsam sei (Ich habe irgendwann in den von mir betreuten Programmmodulen sein Code ersetzt und hatte keinerlei Performancenachteile - teilweise sogar ganz im Gegenteil).

    knivil schrieb:

    Ja, du hast noch nie einen Signal-Handler geschrieben...

    Wozu man in C++ bleiben kann, da C++ von C abstammt (und C++ Bücher diese Teile auch abdecken). Und damit muss man kein C schreiben, da in beiden Sprachen Zeiger zum Standard gehören (selbst die C-Kompatibilitätsheader kommen hierbei nicht ins Spiel).

    Auch wenn C++ einst von C herstammt, entwickeln sich beide Sprache stetig auseinander.

    Und Java und C# haben auch viel von C++ übernommen, dennoch muss man kein C++ lernen um diese zu verstehen (Die Schleifen etc. sind großteils auch mit C identisch, und auch C benötigt man nicht).

    knivil schrieb:

    time aufgerufen oder assert, memset, ...

    Ganz davon abgesehen das ich memset tatsächlich noch nie verwendet habe, habe ich auch gesagt, das die Teile der C-Bibliothek für die es kein Ersatz gibt (bzw. teilweise auch gab) auch in C++ Büchern angesprochen werden.

    Nur muss man nicht erst C mit allen seinen Bibliotheken lernen, um C++ zu lernen. Vieles davon ist unnötig wenn man wirklich C++ lernen will. Die Teile die wichtig sind, werden einem bei C++ beigebracht, ohne die Sprache C als eigenständige Sprache zu lernen. Und einige Komplexitäten in C können mittels C++ entschärft werden (z.B. Doppelzeiger versus Zeigerreferenzen).

    Wozu verdammt noch mal soll jemand der C++ lernen will, noch eine weitere Sprache lernen, wovon er nur die Teile benötigt, die in C++ ebenso zur Sprache gehören, oder die in C++ Büchern angesprochen werden.

    Davon abgesehen das selbst zu Dingen wie assert und time spätestens seit der boost-Bibliothek Ersatz existiert (ich habe mir nur Teile den neuen C++ Standards angeschaut, so das ich nicht sagen kann ob diese nun vielleicht auch Teil des Standards geworden sind - meine berufliche Anforderungen entwickeln sich derzeit von C++ weg, zumal die Umgebung bei uns kein C++11 beherrscht).



  • silent_max schrieb:

    Euch, die sagen, dass z. B. "using namespace std;" keine schöne C++ Programmierung ist oder meinem Dozenten, der es so lesen will.

    Ich persönlich wäre für Letzteres, da ich nicht riskieren will, in der noch ausstehenden Prüfung zum staatlich geprüften Elektrotechniker eine schlechte Note zu bekommen ...

    Du solltest (auch mit den Wissen das er teilweise Unsinn erzählt) dich an deinen Dozenten halten, und die Kröte schlucken. Solltest du aber jemals ernsthaft selbst programmieren wollen, solltest du neulernen.

    Das ist etwa so wie der Dozent den ich in einer Klasse hatte der mit gotos rumgeschmissen hatte, und niemals Schleifen verwendet hat.



  • silent_max schrieb:

    Ich muss C++ "nur" soweit beherrschen, dass ich Klassen programmieren kann.
    [...]
    Wem soll ich jetzt glauben?

    Du scheinst ja zu wissen, dass dir dein Professor C++ nur unvollständig beibringt, daher erübrigt sich die Frage. Was du in der Prüfung hinschreibst, ist eine andere Diskussion.

    Und die Anführungszeichen bei "nur" kannst du ruhig weglassen 😃



  • Java und C# haben auch viel von C++ übernommen

    Du verstehst immer noch nicht. Syntaktisch gleich und uebernommen sind zwei Paar Schuhe. 🙂



  • asc schrieb:

    silent_max schrieb:

    Euch, die sagen, dass z. B. "using namespace std;" keine schöne C++ Programmierung ist oder meinem Dozenten, der es so lesen will.

    Ich persönlich wäre für Letzteres, da ich nicht riskieren will, in der noch ausstehenden Prüfung zum staatlich geprüften Elektrotechniker eine schlechte Note zu bekommen ...

    Du solltest (auch mit den Wissen das er teilweise Unsinn erzählt) dich an deinen Dozenten halten, und die Kröte schlucken. Solltest du aber jemals ernsthaft selbst programmieren wollen, solltest du neulernen.

    Das ist etwa so wie der Dozent den ich in einer Klasse hatte der mit gotos rumgeschmissen hatte, und niemals Schleifen verwendet hat.

    Spricht etwas dagegen, wenn ich weiterhin bei Problemen mich an euch wende? Weil dann rolle ich das Feld von vorne auf.

    Natürlich werde ich so gut es geht selber machen. Bloß ich möchte es, wenn ich schon die Kröte schlucke, "teilweise richtig machen".



  • Warum muss man sich an den Programmierstil des Dozenten halten? Wenn er extra sagt, du musst "using namespace std;" verwenden, sonst gibts weniger Punkte, sollte man das natürlich machen, aber sonst frag ihn halt ob du das auch anders machen kannst.



  • Nexus schrieb:

    Ethon schrieb:

    Wenn du das C Subset nicht beherrschst, dann wird du wohl kaum C++ können, da es gut die Häfte der Sprache ist, unter dem objektorientierten Überbau.

    Das Problem bei solchen Diskussionen ist, dass es immer nur die Sprach- und Bibliotheksmittel sind, die verglichen werden. Das alleine macht aber noch keine Sprache aus, wichtig sind zudem gängige Idiome und Techniken (Stil). Und eben genau diese unterscheiden sich stark zwischen C und C++, von Subset kann oft keine Rede sein.

    Ja, genau. Nur die Syntax von C zu lernen, und 2-3 kleine "hello world" Beispiele zu schreiben wird wohl wenig schaden, wenn man danach C++ lernen will. Wirklich in C programmieren zu lernen ist aber vermutlich unnötig wenn man C++ lernen will, und möglicherweise sogar hinderlich.

    Beispielsweise denke ich, dass einige C++-Programmierer Mühe hätten, eine objektorientierte C-API zu designen. An erster Stelle die, welche OOP in C generell für unmöglich halten.

    Wenn man ihnen keinerlei Hilfestellung gibt, und sie nicht verstanden haben wie C++ vom Compiler umgesetzt wird (z.B. wie ein virtual function call in assembler aussieht), dann könnte das sein.
    Sonst sehe ich da kein grosses Problem - es ändert sich ja nichts Grundlegendes, abgesehen davon dass man viele Dinge halt mit Hand ausprogrammieren muss.



  • asc schrieb:

    Und vor allem: Ich habe nie den C-Stil verinnerlicht.

    Lustig, dass alle, die keinen modernen C-Stil kennen, allen schlechten Code als C-Stil beschimpfen und C als reines Gehacke bezeichnen.

    Dabei kann schönes C viel klarer sein als eine undurchsichtige C++/Boost-Mischung (die, zugegeben, etwas weniger Zeilen beansprucht).


Anmelden zum Antworten