Warum programmiert ihr in C?
-
lookwindows schrieb:
Nur war die ursprüngliche Frage nicht "Warum programmiert ihr in C++?" sondern "Warum programmiert ihr in C?" Meine Antwort dazu:
- kein unötiger Schnickschnack
Definiere Schnickschnack.
lookwindows schrieb:
- ich kann C vollständig in relativ kurzer Zeit lernen
Konnte ich bei C++ auch, ging schneller, als C zu lernen.
lookwindows schrieb:
- C Runtime unter Linux schneller als C++
- Hab Windows, kann da keinen Unterschied feststellen, ob ich z.B. memmove nun unter C oder C++ aufrufe. Wenns da einen Unterschied gibt, sollte mal der entsprechende Compiler für Linux überarbeitet werden.
lookwindows schrieb:
- Es gibt viel mehr C-Programmierer als C++ler
Historisch bedingt, C war vor C++ da, bei uns in der Firma gibts allerdings nur sehr wenige C und sehr viele C++ Programmierer, aber das kann man nicht verallgemeinern.
lookwindows schrieb:
- Programmfluß ist im Gegensatz zu C++ nachvollziehbar
Schon klar, wenn man C++ nicht kann.
[IRONIE]
Ich kann kein F#, deshalb ist für mich der Programmfluss eines F# Programs nicht nachvollziehbar und somit ist F# schlecht.
[/IRONIE]lookwindows schrieb:
- Um Daten und Zugriffsfunktionen zusammenzufassen brauche ich keine Klassen in C.
Klassen gibts in C ja auch gar nicht.
lookwindows schrieb:
- Exceptions funktionieren in C++ nicht wirklich immer wie hier irgendwo im Forum schon von C++lern beschrieben wurde, also muss man eh was Eigenes schreiben oder eine Lib nutzen.
Ach nein, komisch, bei mir tun sie immer das, was sie sollen, vielleicht sitzt dann das Problem ja vor dem Monitor?
lookwindows schrieb:
Auf Deutsch wenn ich C++ programmieren muss könnt ich mir jedesmal den Finger in den Hals stecken.
Jetzt hast du doch einen Grund für den Einsatz von C++, es sorgt bei dir immerhin für eine schlanke Figur. Meinen Glückwunsch.
-
Burkhi schrieb:
lookwindows schrieb:
- C Runtime unter Linux schneller als C++
- Hab Windows, kann da keinen Unterschied feststellen, ob ich z.B. memmove nun unter C oder C++ aufrufe. Wenns da einen Unterschied gibt, sollte mal der entsprechende Compiler für Linux überarbeitet werden.
memmove ist natürlich gleich. Ich weiß auch nicht, welche runtime da gemeint ist.
-
lookwindows schrieb:
- Exceptions funktionieren in C++ nicht wirklich immer wie hier irgendwo im Forum schon von C++lern beschrieben wurde, also muss man eh was Eigenes schreiben oder eine Lib nutzen.
Die gute Exception-Lib...
-
Scheppertreiber schrieb:
Ich lebe vom Programmieren und habe dieses Jahr nicht.
Lustigerweise spart dir das 1 Jahr (wenn denn soviel Notwendig ist) lernen einer anderen Sprache (muss ja nicht C++ sein) deutlich mehr als 1 Jahr auf dein ganzes Leben gesehen.
Mag sein das Script-Kiddies die Zeit haben ... Ergebnisse ? Keiner
hat hier mal aussagefähige Benchmarks oder so aufgeführt (da zähle
ich auch die Entwicklungszeit hinzu).C ist, wenn du die reine Zeit effizienz des Programmieres betrachtest eine ziemlich schlechte Sprache... Es hat andere Vorteile, aber zeiteffizienz gehört da wirklich nicht dazu.
Warum fällt es vielen Leuten so schwer eine Sprache sachlich zu analysieren. Es gibt Situationen wo ich C verwende. Es gibt Situationen wo ich C++ verwende. Es gibt auch Situationen wo ich Java oder C# verwende. Ich kann diese Situationen meistens gut begründen - manchmal ist es aber auch ein Bauchgefühl. Dazu muss ich aber nicht sagen C ist dumm und stinkt, weil ich hier Java für besser halte. Oder C++ ist dumm und stinkt, weil ich hier Python für besser halte.
Ich denke das hat einfach mit dem Tellerrand zu tun über den man gelegentlich schauen sollte...
-
Shade Of Mine schrieb:
.... Es gibt Situationen wo ich C verwende. Es gibt Situationen wo ich C++ verwende. Es gibt auch Situationen wo ich Java oder C# verwende. Ich kann diese Situationen meistens gut begründen - manchmal ist es aber auch ein Bauchgefühl. Dazu muss ich aber nicht sagen C ist dumm und stinkt, weil ich hier Java für besser halte. Oder C++ ist dumm und stinkt, weil ich hier Python für besser halte.
Ich denke das hat einfach mit dem Tellerrand zu tun über den man gelegentlich schauen sollte...
Genauso sieht es aus. Wenn ich für einen Mkrocontroller keinen Java, C++ oder was weiss ich Compiler bekomme, dann muss ich eben das nehmen, was es dafür gibt, oder ist lasse es sein. Aber deswegen kann ich doch nicht sagen, dass das Teil "Scheisse" ist.
Treiber für Windows müssen meines Wissens ja auch in C geschrieben werden.
-
Shade Of Mine schrieb:
Scheppertreiber schrieb:
Ich lebe vom Programmieren und habe dieses Jahr nicht.
Lustigerweise spart dir das 1 Jahr (wenn denn soviel Notwendig ist) lernen einer anderen Sprache (muss ja nicht C++ sein) deutlich mehr als 1 Jahr auf dein ganzes Leben gesehen.
Mag sein das Script-Kiddies die Zeit haben ... Ergebnisse ? Keiner
hat hier mal aussagefähige Benchmarks oder so aufgeführt (da zähle
ich auch die Entwicklungszeit hinzu).C ist, wenn du die reine Zeit effizienz des Programmieres betrachtest eine ziemlich schlechte Sprache... Es hat andere Vorteile, aber zeiteffizienz gehört da wirklich nicht dazu.
Erzähl doch nicht so ein Mumpiz, wenn ich für jeden Scheiß gleich mit Klassen anfangen ist das sehr ineffizient und da muss mein Projekt schon ziemlich groß sein damit sich OOP auch lohnt. Wenn man C++ so programmiert wie es hier immer verlangt wird ist es alles andere als Ressourcensparend und effizient.
Shade Of Mine schrieb:
Warum fällt es vielen Leuten so schwer eine Sprache sachlich zu analysieren. Es gibt Situationen wo ich C verwende. Es gibt Situationen wo ich C++ verwende. Es gibt auch Situationen wo ich Java oder C# verwende. Ich kann diese Situationen meistens gut begründen - manchmal ist es aber auch ein Bauchgefühl. Dazu muss ich aber nicht sagen C ist dumm und stinkt, weil ich hier Java für besser halte. Oder C++ ist dumm und stinkt, weil ich hier Python für besser halte.
Ich denke das hat einfach mit dem Tellerrand zu tun über den man gelegentlich schauen sollte...
Da wo Systemnähe gefragt ist nimmt man C, für den Rest gibt es andere Sprachen. Aber C++ würde ich nie und nimmer einsetzten, es ist einfach eine total verfrickelte Sprache. Gute C++ Programmierer zu finden ist bestimmt nicht einfach und das wäre für mich als Chef schon ein Nogo für die Sprache.
Ich verstehe eh nicht was sich hier C++ler einmischen. Wir mögen die Sprache aus guten Gründen nicht so wie sie viele andere Menschen auch nicht mögen. Da könnt noch so viele objektive Gründe nenne warum C++ so toll das sie fast mit PHP von der Popularität mithalten kann, trotzdem mögen wir sie nicht. Und ja viele haben C++ auch ausprobiert und finden es trotzdem kacke.
Vielleicht kapiert ihr es ja so. Früher gab es Betamax und VHS als Videotechnik Betamax war technisch viel besser aber die Leute haben VHS gekauft. OSX ist auch das bessere System ich bleibe bei Linux/Windows und PCs. C++ hat theoretisch auch die besseren Karten ich finde es sehr anstrengend C++ zu programmieren und lasse es und habe es noch nie bereuen müssen. Es gibt nicht einen einzigen Grund warum ich jemals eine Zeile C++ schreiben müsste, also warum soll ich mir das Flickwerk antun?
-
cpphuster schrieb:
Shade Of Mine schrieb:
Scheppertreiber schrieb:
Ich lebe vom Programmieren und habe dieses Jahr nicht.
Lustigerweise spart dir das 1 Jahr (wenn denn soviel Notwendig ist) lernen einer anderen Sprache (muss ja nicht C++ sein) deutlich mehr als 1 Jahr auf dein ganzes Leben gesehen.
Mag sein das Script-Kiddies die Zeit haben ... Ergebnisse ? Keiner
hat hier mal aussagefähige Benchmarks oder so aufgeführt (da zähle
ich auch die Entwicklungszeit hinzu).C ist, wenn du die reine Zeit effizienz des Programmieres betrachtest eine ziemlich schlechte Sprache... Es hat andere Vorteile, aber zeiteffizienz gehört da wirklich nicht dazu.
Erzähl doch nicht so ein Mumpiz, wenn ich für jeden Scheiß gleich mit Klassen anfangen ist das sehr ineffizient und da muss mein Projekt schon ziemlich groß sein damit sich OOP auch lohnt. Wenn man C++ so programmiert wie es hier immer verlangt wird ist es alles andere als Ressourcensparend und effizient.
Erzähl doch nicht so ein Mumpiz, keiner soll für jeden Scheiß gleich mit Klassen anfangen. Wir sind in C++ nicht bei Java, wo man das tun muß. OOP lohnt sich schon froh, wie die stream-Bibliothek von C beweist.
Bleib mal nicht bei dem Scheinargument stehen, C++-Code sei automatisch langsam. Und auch mit dem Abweichen, daß Du sagst, C++ sei automatisch langsam, wenn man fehlerfreien oder "hübschen" C++-Code schreibt, wird es nicht richtiger.
Die exe wird größer sein, weil man gerne Speicher bezahlt, um Geschwindigkeit zu kaufen, nimm es meinetwegen nicht für embedded systems. Aber das war auch schon alles.
-
cpphuster schrieb:
Es gibt nicht einen einzigen Grund warum ich jemals eine Zeile C++ schreiben müsste
Wird sich wohl schwer vermeiden lassen, wenn du C schreibst.
-
cpphuster schrieb:
Ich verstehe eh nicht was sich hier C++ler einmischen.
Weil Ihr es traditionell nicht schafft, zu sagen, daß Ihr C mögt, ohne als Begründung schauerliche Lügen über C++ zu erzählen.
cpphuster schrieb:
C++ hat theoretisch auch die besseren Karten ich finde es sehr anstrengend C++ zu programmieren und lasse es und habe es noch nie bereuen müssen. Es gibt nicht einen einzigen Grund warum ich jemals eine Zeile C++ schreiben müsste, also warum soll ich mir das Flickwerk antun?
So geht's. Das ist doch ein gutes Glaubensbekenntnis für Eure kleinen Truppe.
-
Da könnt noch so viele objektive Gründe nenne warum C++ so toll
Oh mann. Du sagst selbst schon, dass die Gründe, die hier für C++ gebracht wurden, objektiv sind. Damit reduzierst du deine gesamte Aussage auf: Ich habe C++ nie verstanden, möchte es nicht lernen und deswegen ist es eine scheiß Sprache.
Man muss C++ ja nicht mögen, aber mann könnte doch wenigstens so fair sein zu sagen, dass C++ - also echtes C++, das nicht auf seine C Untermenge reduziert ist - nicht automatisch langsamer ist und man in C++ sicheren, verständlichen und wartbaren Code schreiben kann.
-
LOL kleine Truppe, es wird ca doppelt so viel C programmiert wie C++.
Zu dem anderen Schlumpf hier, man kann sehr wohl C programmieren ohne C++ aber man kann kein C++ programmieren ohne C zu nutzen. C++ ist keine 100% eigene Sprache C++ ist ein Riesen-Flickenteppich. Wer drauf steht, ok.
Eierlengende Wollmilchsäue sind immer sehr komplex und kompliziert und man merkt an allen Ecken und Enden das es zusammengefrickelt ist. Wer drauf steht ok, die Mehrheit der Programmierer steht nicht auf C++ und wer bin ich als dass ich mit der Mehrheit streite?
Aber schon lustig wie sich die C++ Experten hier mit ihrer Sprache selbst lächerlich machen, aber was soll man erwarten hier ist ein C++ Forum. Im Java Forum sieht es wieder anderes aus usw...blahblahblubb
Damit ihr gut schlafen könnt: "C++ ist die schönste Sprache der Welt, es macht son Spaß das Alles zu lernen und soviel Paradigmen, das ist so toll wenn man mit einem Werkzeug alles machen kann und viel besser als wenn man dafür angepasste Werkzeuge nimmt weil hier muss man ja nur eine Sprache lernen und die ist auch die schnellste Sprache der Welt und jeder der sie nicht mag ist einfach zu blöd sie zu lernen."
kwt
-
cpphintenraus schrieb:
LOL kleine Truppe, es wird ca doppelt so viel C programmiert wie C++.
Oh, ich dachte nur, weil es keine neuen C-Bücher gibt und C-Foren fallen mir auch irgendwie nie ins Auge. Und ich nicht annahm, daß so viele C programmieren, ohne sich auszutauschen. Da hab ich mich dann wohl vertan. Deine Quelle ist aber nicht zufällig der TIOBE-Index?
-
Mein kleiner Bastelfreund, schon mal daran gedacht dass es in C einfach nicht so viele Probleme gibt die in einem eigenen Forum geklärt werden müssen???
K&R wird immer mal wieder neu gedruckt und geht auch gebraucht immer noch gut weg. Herr Wolf(Das neue soll mal gut sein ;-)) bringt auch seine neuen Bücher raus und Bücher wie "Moderne C-Programmierung" gibt es auch immer mal wieder. Die Aussage dass keine neuen Bücher zu C raus kommen ist schlicht weg falsch. Es sind viel weniger als in C++, aber in C gibt es auch nicht so viel zu lernen wie in C++. Bald wird ja an C++ wieder was reingefrickelt und dann gibt es wieder ganz tolle Bücher und jeder kann wieder neu kaufen.
Wie leicht ein Werkzeug zu handhaben und zu erlernen ist ist auch schon ein Kriterium für dessen Effektivität.
Die Sprache ist so schrecklich dass man echt den Hut vor den Leuten ziehen muss die sich sowas freiwillig antun.
-
cppfrickelkram schrieb:
Mein kleiner Bastelfreund, schon mal daran gedacht dass es in C einfach nicht so viele Probleme gibt die in einem eigenen Forum geklärt werden müssen???
dh die Anfänger in C sind heute soviel besser als die Anfänger von vor 5 Jahren?
Nicht schlecht.
-
Da hast du was falsch verstanden, aber egal. Auf jedenfall reicht das Forum hier für die paar rein C-Spezifischen Problemchen, auch wenn es technisch eher auf 8. Klasse Hauptschulniveau ist, die Javaleute habe sich da schon weiter entwickelt. In C++ hat man ja zu den paar C-Stolpersteinchen noch etliche mehr, allein in OOP kann man so viel verkehrt machen da sind Zeiger ja Waisenknaben dagegen.
Lustig finde ich ja dass C++ler immer zum Teil C programmieren müssen, aber nicht umgekehrt *hehe
-
Da braucht ihr hier gar nicht so viel diskutieren schon allein das ich von vielen Sprachen aus auf C Binaries zugreifen kann ist das Killerargument für C. Es wird schon lange nicht mehr alles in nur einer Sprache geschrieben und für solche Hybridprodukte macht es keinen Sinn C++ zu nehmen, da es kaum zu anderen Hochsprachen kompatibel ist. Meine Meinung nach braucht C++ bald kein Mensch mehr. Ein C/Java C/Python Produkt wird immer viel effektiver sein als alles in dem schrecklichen C++ zu schreiben und ständig aufpassen zu müssen ob man sich nicht wieder mal ins Bein geschossen hat. Wenn du dir nicht die heftigsten Gedanken beim C++ Programmieren machst biste langsamer als Java und C# und das frustriert einfach und macht auch keinen Spaß.
An alle Anfänger Finger weg von C++, die Sprache ist nur was für Masochisten. In keiner anderen Sprache kann man soviel Bockmist produzieren. Die meisten C++ Bücher sind nicht umsonst Schrott, sondern weil selbst Experten mit der Sprache ihre Probleme haben.
-
cppforfreaks schrieb:
Da hast du was falsch verstanden, aber egal. Auf jedenfall reicht das Forum hier für die paar rein C-Spezifischen Problemchen, auch wenn es technisch eher auf 8. Klasse Hauptschulniveau ist, die Javaleute habe sich da schon weiter entwickelt. In C++ hat man ja zu den paar C-Stolpersteinchen noch etliche mehr, allein in OOP kann man so viel verkehrt machen da sind Zeiger ja Waisenknaben dagegen.
Lustig finde ich ja dass C++ler immer zum Teil C programmieren müssen, aber nicht umgekehrt *hehe
Ich glaube das alles liegt zu großen Teilen an einem Herrn Wolf.
-
Das mit den Büchern zu C war ja der größte Stuß hier. Allein für 2010 habe ich bei Amazon auf die schnelle drei neue C-Bücher gefunden.
-
nurnochkopfschüttel schrieb:
Das mit den Büchern zu C war ja der größte Stuß hier. Allein für 2010 habe ich bei Amazon auf die schnelle drei neue C-Bücher gefunden.
Stimmt, es gibt nicht keine neuen C-Bücher. Vielleicht wenige, aber nicht keine. War falsch von mir.
-
Bei C-Codezeilen hat man eine genauere Vorstellung davon, welche Instruktionen
der Compiler daraus generieren wird.
Insbesondere sind mit sequentiellen C-Strukturen die meisten I/O Operationen prinzipiell erheblich besser optimierbar ('Marshalling') als mit
einer OO-Hochsprache. Ein 'Objekt' (= zusammengehörige Daten) gelangen mit
fread(), fwrite(), memmove(), memcpy() auch 'zusammengehörig' sowie mit erheblich weniger IN / OUT Instruktionen an ihren Zielorten an.
Die Elemente einer OO-Klassen-Instanz liegen demgegenüber selten (bis überhuapt
nie) 'hintereinander' im Speicher, sind oft stark fragmentiert (kreuz und quer
im Speicher verstreut), und können so nur mit sehr vielen INs oder OUTs (und
natürlich auch nur in sehr kleinen Portionen) ausgegeben oder eingelesen werden.
Mit C++ ohne C-Basis ist die Gefahr größer, suboptimale Klassen zu entwerfen,
bei denen in keinster Weise darauf Rücksicht genommen wird, wo die Daten
eigentlich im Speicher untergebracht sind. Und deren Instanzen dann nur noch mühsam in sehr vielen kleinen Teilschritten und deshalb zuhöchst langsam für I/O Operationen zu gebrauchen sind, weil eben eine Instanz einer solchen
Klasse nicht mehr 'in einem Stück' mit memmove(), fwrite() etc. verschoben werden kann. Und egal wie 'gratis' die OOP-Ausnahmenbehandlung oder sonst etwas
an C++ auch sein sollte: Letzten Endes werden sich I+O in ein C++ Programm stets
erheblich langsamer gestalten als in C, weil eben in C++ einfach keinerlei Rück-
sicht auf ein Instruktions-Freundliches Speicherabbild einer Klassen-Instanz
genommen wird.
Und genau aus diesem Grund läuft ein C-Programm auch idR bis zu 30 x schneller als ein (scheinbar/oberflächlich betrachtet) äquivalentes OOP - C++ - Programm:
Weil der C++ - Compiler nämlich auch 30 x mehr I/O - Instruktionen erzeugen muss, während ein C - Compiler (dank Rücksichtnahme des C-Programmierers auf
ein I/O - Freundliches Speicherabbild seiner Daten) nur eine benötigt.
So unglaublich das für den (maschinenfernen) C++ Programmierer auch klingen
mag, aber letzten Endes sind I/O - Instruktionen der ganz große 'Flaschenhals' in jedem Programm und erfordern die meiste Zeit. In einem C++ Programm müssen aber ganz besonders viele I/O - Instruktionen codiert werden, weil die Daten so verstreut im Speicher liegen (man pfeift ja als C++ - Skript Kiddie auf die Speicherverwaltung, gelle?). Und das ist der eigentliche Hauptgrund, warum C++
Programme erheblich langsamer sind als äquivalente C - Programme (und als C-Programmierer nimmt man auch mehr Rücksicht darauf, dass man seine Daten sequentiell im Speicher unterbringt, und nicht kreuz und quer verstreut, wie es bei den Elementen von <vector>, <list>, <map> usw. der Fall ist.
Weniger I/O - Instruktionen im Maschinencode
== 30 x schneller als C++ - Bloatware.K.A. in wie weit meine Ausführungen jetzt für C++ - 'Experten' ohne Ahnung von der Arbeitsweise einer CPU obektiv oder überzeugend erscheinen mögen, aber
vielleicht gibt's ja doch noch ein paar C++ Leute die aus C oder Assembler kommen (und die es nicht erst nach C++ gelernt haben). Denn das wären hier die wirklichen 'Experten', und die lachen sich wohl bei jedem Satz über die angeblich gleichwertige Performance von OOP-<vector>-C++ -Code
und C - Code mit Ausnutzung sequentieller Daten speziell aus I/O Gründen ins Fäustchen. Auch für Leute, denen bisher noch nicht bewusst war, wo eigentlich die meiste Rechenzeit verloren geht
(die objektorientierte Datenmodellierung in einer Hochsprache == I/O-feindlich)
sollte jetzt klar sein, warum C-Programme um den Faktor 30 und noch höher schneller ausgeführt werden können als C++ - Bloatware:
Es liegt an der prinzipiell unterschiedlichen Art, Daten (== Objekte) zu modellieren.
(I) C == Sequentiell == I/O - freundlich.
(II) C++ == Fragmentiert == I/O - feindlich.
Deshalb liebt der C-Programmierer das Array, während es der C++ - Programmierer aus Prinzip hasst, wie der Teufel das Weihwasser scheut, können in einem C++ Programm die Speicherorte (auch zusammengehöriger Objekte) gar nicht zufällig genug im Speicher verstreut sein. Jeder neue C++ - Anfänger hier in den Foren, der es wagt, in seinem C++ - Quellcode ein Array zu verwenden, bekommt Vorwürfe als Antwort, warum er es nicht mit <vector> oder sonstwas versucht, und dass er Arrays in C++ tunlichst niemals verwenden darf.
Kann man fast täglich ein derartiges Thema im C++ - Forum hier finden.
Was das für I/O bedeutet -> siehe oben. Und genau deshalb wird ein C++
Programm auch niemals auch nur annähernd an die Ausführungs-Geschwindigkeiten eines funktional identen C-Programms herankommen. Weil die Daten in C++ (und OOP) prinzipiell falsch und modelliert werden. Und das nur deshalb, weil kein moderner C++ - Programmierer einen C - oder Assembler- Background hat.
Denn in letzterem Fall würde das nicht passieren. Dann nimmt man nämlich auch in C++ mal ein Array sowie viele andere C - Konstrukte (keine überlangen Schleifen, bei Funktionsaufrufen mit Far Calls sparsamer sein, wenn Near Calls möglich sind usw.).
Und weiß auch, warum man es tut. Die C++ - SkriptKiddies des neueren Schlags, die C++ (falscher Weise) vor C erlernen, werden deshalb stets mindestens 30x langsamere Programme schreiben, als professionelle C - Programmierer (und natürlich auch professionelle C++ - Programmierer, die mit C angefangen haben und die Grundlagen, warum und wie der Rechner ihr Programm überhaupt ausführt, nicht verlernt haben).MFG