C oder C++?



  • Hey,
    Ich hab einige Erfahrungen in PHP und auch Java, und wollte mich nun an systemnaehere Programmierung ranwagen ~~ was laege da naeher als C oder C++?

    Nun, meine Hauptintention ist bei OpenSource Projekten (Linux) meinen Beitrag leisten zu koennen, und mit OpenGL rumzuspielen 🙂

    Nun hab ich ja etwas erfahrung mit objektorientierter Programmierung und finde den Ansatz im Prinzip toll, weiss aber nicht so richtig was ich mir nun unter dem C Ansatz vorstellen soll? Weiter habe ich gelesen, C sei die bei OpenSource Projekten am weitesten verbreitete Sprache (soweit ich weiss sind linux kernel und viele dinge wie gnome etc. in C geschrieben).

    Was wuerdet ihr also empfehlen ?

    Buchtechnisch hatte ich ein Auge auf K&R fuer C, bzw. Thinking in C++ fuer cpp geworfen. Irgendwelche Einwaende dazu?

    danke im Vorraus 🙂

    compul



  • Man könnte C als Subset von C++ betrachten, und wenn du jetzt nicht Linux als Ziel angegeben hättest würde ich dir C++ empfehlen. C++ bietet C gegenüber viele Vorteile, besonders die STL mit ihren Datentypen und Algorithmen ist eigentlich unverzichtbar. Für alltägliche Aufgaben wie strings oder irgendwelche Container musst du dir in C selbst was basteln, in C++ gehören ´ne Menge Komfortfunktionen und -klassen zum Standard.
    Linux wird aber in C entwickelt, deshalb hast du eigentlich keine Wahl, wenn du da mitmischen willst.



  • "Näher als c" wäre nur assembler.
    Für mich ist c wenn überhaupt sehr einfach, kein "besonderer" ansatz. Wenn du weißt was auf der assembler ebene passiert dann kann man relativ schnell erklären wie c das abbildet.
    ansonsten kannst du für den umstieg ein paar sachen beachten und schon recht weit kommen:
    - Du hast Funktionen wie´in c++ oder java für operationen auf Daten, und halt die daten global oder lokal in der funktion deklariert.
    - Funktionen sind halt nicht an klaasen gebunden. Daten die du in funktionen verarbeitest sind entweder global verfügbar oder werden per parameter übergeben.
    -structs sind syntaktisch wie klassen(mein_struct.member = 5). bloß ohne alle extras(methoden, konstruktoren).
    -pointer
    -new = malloc, und alles allokierte muss man per free löschen.

    Jetzt noch die Syntax lernen und du hast es im großen und ganzen kapiert.



  • Kurze Frage:

    was verstehst du unter Linux?

    Nur den Kernel, was ja eigentlich auch mit Linux gemeint ist, oder eine komplette Distribution?

    Wenn du nur den Kernel meinst, dann ist C deine Wahl. Der Kernel ist komplett in C geschrieben, allerdings objektbasiert.

    Wenn du eine komplette Distri meinst, dann nimm C++, weil z.B. KDE in C++ geschrieben ist, und für GTK gibt es GTKmm welches auch in C++ geschrieben ist.

    Ansonsten kannst du dich aber unter Linux mit der Sprache austoben die du willst.



  • Bei der systemnahen Programmierung ist C generell sehr üblich.



  • C und C++ sind ähnlich stark verbreitet, wenn du ernsthaft programmieren willst, musst du beide können. Die Sprachphilosophien sind zwar unterschiedlich, aber wenn du einige Quelldateien anschaust, merkst du das relativ schnell. Womit du anfängst ist relativ egal, aber bleib dann erst mal ein Jahr bei der Sprache und meine nicht, wenn du C++ kannst, könntest du auch C (und umgekehrt).

    Wenn du sehen willst, wie sich OOP und C vereinbaren lassen, schau mal die GLib an (oder gleich GTK+).

    Die Bücher sind gut. Für C++ wird manchmal noch der Primer empfohlen, aber dein jetziger Vorschlag passt auch.



  • compul schrieb:

    Hey,
    Ich hab einige Erfahrungen in PHP und auch Java, und wollte mich nun an systemnaehere Programmierung ranwagen ~~ was laege da naeher als C oder C++?

    Nun, meine Hauptintention ist bei OpenSource Projekten (Linux) meinen Beitrag leisten zu koennen, und mit OpenGL rumzuspielen 🙂

    Nimm C, das ist für den Anfang vom Sprachwortschatz und den Features überschaubarer und daher schneller zu lernen.

    Außerdem ist OpenGL selbst in C geschrieben, da liegt es nahe, erstmal OpenGL von C Code aus zu nutzen.

    Desweiteren lernt man in C seine Sachen noch selbst zu implementieren, damit bist du der Systemprogrammierung näher als wenn du dich ständig auf die STL verläßt.
    Denn bei kleinen Systemen, wie z.B. in der µC Programmierung üblich, wirst du oft kein C++ und keine STL haben und da der Speicher dort mickrig ist, ist selbstimplementierter Code meist sinnvoller.



  • Nimm C schrieb:

    Denn bei kleinen Systemen, wie z.B. in der µC Programmierung üblich, wirst du oft kein C++ und keine STL haben und da der Speicher dort mickrig ist, ist selbstimplementierter Code meist sinnvoller.

    Ich wage zu bezweifeln, dass selbst implementierter Code effizienter im Speicherverbrauch und Performance ist. Das mag man bei überschaubarem Code sagen können, aber bei größeren Projekten? Auch in C gilt die Regel: Besser Libs verwenden, die sich seit Jahren bewährt haben, als irgendetwas selbst zusammen zu basteln.



  • Steffo schrieb:

    Ich wage zu bezweifeln, dass selbst implementierter Code effizienter im Speicherverbrauch und Performance ist.

    also speicherverbrauch ist bei einer auf universalität ausgerichteten library keine kunst...



  • Steffo schrieb:

    Nimm C schrieb:

    Denn bei kleinen Systemen, wie z.B. in der µC Programmierung üblich, wirst du oft kein C++ und keine STL haben und da der Speicher dort mickrig ist, ist selbstimplementierter Code meist sinnvoller.

    Ich wage zu bezweifeln, dass selbst implementierter Code effizienter im Speicherverbrauch und Performance ist. Das mag man bei überschaubarem Code sagen können, aber bei größeren Projekten? Auch in C gilt die Regel: Besser Libs verwenden, die sich seit Jahren bewährt haben, als irgendetwas selbst zusammen zu basteln.

    Ich glaube nicht, daß große Projekte auf mickrige µC laufen sollen.

    Wenn die µC schon so wenig RAM hat, das man an allen Ecken und Enden sparen muß, dann wird der µC sicher nur eine sehr kleine Aufgabe erledigen müssen und da ist man mit IMO spezialisiertem Code besser dran.



  • Danke fuer die vielen guten reaktionen 🙂

    es wird wohl darauf hinaus laufen dass ich mir erstmal das k&r buch hole und mit C anfange, um dann spaeter auf cpp zurueckzukommen. das einfach weil ich einen alten schulfreund habe der im moment an der fh c lernt und ich mich so mit ihm austauschen kann, und weil c (nicht dass ich das genau wuesste,aber) so klingt als waere es eben naeher am system, und ich fange prinzipiell eigentlich lieber bei den roots an 🙂

    lg, compul

    ps: mit linux sowohl software, welche es in cpp (e.g. kde, mag ich nicht) und auch c (gnome, mag ich nicht; awesome wm, liebe ich 🙂 ) gibt. ich wuerde mir aber nicht anmassen ernsthaft fuer ein system mitentwickeln zu wollen, welches ich nicht von grund auf verstehe. das kann doch nur schiefgehen 😛



  • compul schrieb:

    ich wuerde mir aber nicht anmassen ernsthaft fuer ein system mitentwickeln zu wollen, welches ich nicht von grund auf verstehe. das kann doch nur schiefgehen 😛

    Du wirst kaum jemanden finden, der ein System von Grund auf versteht. Ich denke z. B. nicht, dass Linus Torvalds noch großartig durchcheckt, was im Kernel abgeht. Zu vieles wurde von anderen commitet und zu vieles liegt über seinen Kompetenzen.



  • von grund auf war vielleicht die falsche bezeichnung.. ich meinte mehr sowas wie 'prinzipiell'? sorry, mein deutsch laesst nach hier in taiwan 😃



  • Was machst du in Taiwan? Dein Praktikum?



  • compul schrieb:

    es wird wohl darauf hinaus laufen dass ich mir erstmal das k&r buch hole und mit C anfange, um dann spaeter auf cpp zurueckzukommen.

    You_choosed(!(http://www.youtube.com/watch?v=-DGFuHC75aY));



  • @Steffo: Chinesisch lernen...und KungFu, Kalligraphie. mehr noch nicht. seit september 2010 jetzt. September 2012 werd ich dann ein physikstudium beginnen, vermutlich in taiwan.

    @Nimm C! ja... ich nehm doch c ^^ finde ich erstmal interessanter. wenn ich meine mit c klarzukommen, und das gefuehl habe cpp zu brauchen, dann wende ich mich dem mal zu.



  • compul schrieb:

    @Steffo: Chinesisch lernen...und KungFu, Kalligraphie. mehr noch nicht. seit september 2010 jetzt. September 2012 werd ich dann ein physikstudium beginnen, vermutlich in taiwan.

    Hey, du bist echt cool! *beneid* 🙂
    Guck dir auch mal Tai Chi an! Eine oft unterschätzte Kampfkunst, bzw. es ist mehr als das! 🙂

    Liebe Grüße
    Steffo



  • Es läuft so ab:

    Du fängst mit C an und bist von begeistert, jedoch wunderst du dich warum so viel über C++ geredet wird und später entschliesst du dich C++ zu erlernen, da es wie C aussieht aber dieses moderne OOP syntaktisch unterstützt. Du bist wiederum begeistert von diesem C++, fällst (wie bei C) oft auf die Nase.

    <Jetzt kommt die erste Verzwiegung>

    Fall A: Du bleibst ein ewiger C++-Programmierer, der alles andere ablehnt, weil die Lernresistenz den Drang nach Neuheiten überdeckt. Du trampelst von nun an auf der Stelle und versuchst deine kognitive Dissonanz zu reduzieren in dem du dich in C++ Foren "über die Vorteile von C++ gegenüber anderen Programmiersprachen austauschst". Dead End.

    Fall B: Du gehörst zur neugierigen Natur und bahnst dir deinen Weg durch die modernen Programmiersprachen. Du probierst neue beliebte Sprachen wie python und ruby aus, probierst bestimmt auch das so weit verbreitete Java, aus historischen Gründen (oder einfach aus Neugier) schaust du dir evtl lisp & scheme oder gar fortran an. Damit erweiterst du deinen Horizont unglaublich in Bezug zu Fall A. Früher oder später landest du jedoch bei Haskell. Jetzt wo du einen umfangreichen Überblick hast, bist du ein auf die Welt der Programmiersprachen bezogen ein Weltoffener Mensch und kannst dich weiter spezialisieren. Dein Wissen und dein Erfahrungsschatz reicht weiter als wenn du Fall A eingeschlagen hättest, unabhängig davon, ob deine Spezialisierung auf C++ fällt oder eine andere Sprache deiner Wahl. Frohes Proggen.

    In dem Sinne noch: bleibe neugierig!



  • @Steffo: taiji ist mit im programm 😉 und ist toll, ja
    ich wuerde mich auch beneiden waere ich nicht in taiwan 😛 bzw... dann ja nicht mehr 😕
    ich schliesse du betreibst taiji? sehr gut 🙂

    @Hellseher: definitiv neugierig bleiben 🙂 Java hab ich ja schon erfahrungen mit gemacht, scheme hab ich mir mal was inner uni zu angehoert.. klang nett. und das was du beschrieben hast (B) ist so in etwa der plan gewesen von vornherein 🙂



  • Ja, ich mache seit ca. 3 Jahren Tai Chi bzw. komme seit dem Studium leider nicht mehr so oft dazu... 😞
    Oh Mann, wenn ich 19 wäre, würde ich mir das glaube ich auch leisten, aber ich habe eine andere und ebenfalls interessante Laufbahn hinter mir. 🙂 Taiwan - ist sicherlich angenehmer als VR China. Man man man. 🙂

    Liebe Grüße
    Steffo


Anmelden zum Antworten