C oder C++?

MisterSempron

Fleet Captain Special
Mitglied seit
14.01.2006
Beiträge
338
Renomée
11
Hallo allerseits!
Ich würde mich gerne etwas näher mit dem Programmieren beschäftigen. Ich stehe jetzt zwischen der Wahl C oder C++. Mit welcher der beiden Sprachen kann man denn mehr machen?
Ich würde damit gerne erstmal Programme auf der Kommandokonsole schreiben, später dann mit GUI und vielleicht auch Gerätetreiber für Linux. Kann man mit C++ überhaupt Gerätetreiber schreiben?
Würdet ihr empfehlen beide Programmiersprachen zu erlernen? (Würd mir nichts ausmachen ;))

Tja, Fragen über Fragen...;D
Danke schonmal für eure Antworten.

MisterSempron
 
Klingt lustig...;D ;) Aber was ist "Turing-vollständig"? *noahnung*

http://de.wikipedia.org/wiki/Turingmaschine

Und um mal eine sinnvolle Antwort auf deine Frage zu geben, C++ ist auf Objektorientierung ausgelegt, und unterstützt diese im Gegensatz zu C. Das ist insbesondere bei großen Projekten sehr hilfreich, weil es den Programmierer unterstützt. Wenn du aber wirklich mal Treiber (für Linux) schreiben willst, musst du unter Umständen in den Kernel. Dann hilft dir nur noch C, weil der Kernel keine Laufzeitunterstützung für C++ bietet.
 
da bleibt mir wohl nichts Anderes übrig, als beide Sprachen zu Lernen. Welche Sprache wäre denn der beste Anfang? C, oder?
 
da bleibt mir wohl nichts Anderes übrig, als beide Sprachen zu Lernen. Welche Sprache wäre denn der beste Anfang? C, oder?

Eigentlich ist das egal. Die einen sagen so rum, die anderen so. Im Endeffekt wirst du dich mit beiden Kombinationen behindern, weil sich beide Sprachen extrem ähnlich sind, aber an entscheidenden Stellen doch unterschiedliche Konzepte haben. Wenn du dich nicht entscheiden willst, würfel einfach aus. Du kannst mit beiden Sprachen auf Kommandozeile wie grafisch Programme erstellen. C ist in sofern vielleicht einfacher, weil es kleiner ist. Dafür musst du wahrscheinlich häufiger Lösungen selber erstellen, oder auf fremde Bibliotheken zurückgreifen, als bei C++, welches entsprechende Lösungen schon mitbringt (z.B. die komplette String-Behandlung, Listen, Vektoren etc.).
 
Eigentlich ist das egal. Die einen sagen so rum, die anderen so. Im Endeffekt wirst du dich mit beiden Kombinationen behindern, weil sich beide Sprachen extrem ähnlich sind, aber an entscheidenden Stellen doch unterschiedliche Konzepte haben. Wenn du dich nicht entscheiden willst, würfel einfach aus. Du kannst mit beiden Sprachen auf Kommandozeile wie grafisch Programme erstellen. C ist in sofern vielleicht einfacher, weil es kleiner ist. Dafür musst du wahrscheinlich häufiger Lösungen selber erstellen, oder auf fremde Bibliotheken zurückgreifen, als bei C++, welches entsprechende Lösungen schon mitbringt (z.B. die komplette String-Behandlung, Listen, Vektoren etc.).
Ich denke, dass ich mit C anfangen werde. Das einfache und kleine zuerst und dann C++.
Gegenseitig behindern...hmm...hast recht, könnte passieren, wenn ich mal nen C mit nem C++-Quelltext vergleiche, da sind die doch ganz ähnlich. Naja, muss ich eben aufpassen. Lehrbücher hab ich mir auch schon welche ausgeguckt, werd ich dann anfang nächsten Monat bestellen wenns wieder Taschengeld gibt. ;) :)

Danke für die Hilfe! :)
 
Die Unterschiede wurden ja schon erläutert, ich will nur noch hinzufügen, dass Du möglichst nicht den Fehler machen sollst, beim Umstieg von C auf C++ einfach in C mit Klassen zu programmieren.
Damit meine ich, C++ hat zwar fast identische Syntax aber erfordert andere Paradigma zur Lösung eines Problems.
Man sollte sich also diese zu Herzen nehmen und möglichst überhaupt keine C Methoden und Bibliotheken benutzen, man sieht allzu häufig im Internet C++ Lösungen angeboten, die eigentlich C Lösungen sind.
 
Ich denke, dass ich mit C anfangen werde. Das einfache und kleine zuerst und dann C++.
Das C einfacher ist als C++ würde ich so jetzt nicht unterschreiben. Es ist kleiner, kann aber gerade deswegen auch schwieriger sein, weil man viele Kleinigkeiten zu Fuß machen muß, die bei anderen Sprachen schon integriert sind.

Wenn es um Treiber usw. geht, geht kein Weg an C vorbei, ansonsten würde ich mit was einfacherem anfangen.
Ich persönlich würde C# empfehlen. Es gibt viel Literatur im Netz dazu und es gibt eine kostenlose sehr anständige Entwicklungsumgebung von Microsoft (Visual Express C# glaube ich).
 
sofern Du noch keine Ahnung von Programmieren hast, würde ich auch mit C anfangen, da der C++ m.E. nur ein Aufsatz ist der eben u.A. das OO mitbringt.

Solange Du also mit Grundlagen programmierst, sollte C ausreichen.
Klassen ist ein grosses neues Thema für sich alleine und da sollte man sich mit den Grundlagen nicht mehr rumprügeln müssen.
 
Wenn Du Gerätetreiber schreiben möchtest, führt an C kein Weg vorbei. Wenn Du aber einfach mit ein paar Anwendungen Konsole/GUI experimentieren möchtest, würde ich gleich zu Java/C# gehen.
 
dem schließe ich mich an. du solltest mit c anfangen. c++ ist eine erweiterte version und es macht für dich u.U. nur mehr probleme das nachzuvollziehen.

aber sei vorsichtig, mit c kannst du viel mist bauen. im gegensatz zu java z.B. kannst du in c direkt auf speicherstellen z.B. in deinem Arbeitsspeicher zugreifen was in bestimmten fällen zum systemcrash führen kann.

lg
 
aber sei vorsichtig, mit c kannst du viel mist bauen. im gegensatz zu java z.B. kannst du in c direkt auf speicherstellen z.B. in deinem Arbeitsspeicher zugreifen was in bestimmten fällen zum systemcrash führen kann.

Nur, wenn man direkt am OS rumbastelt, oder das OS fehlerhaft ist. Ansonst sorgt der Speicherschutz dafür, dass einem nur das fehlerhafte Programm abschmiert. Der Rest darf davon nicht betroffen werden.
 
am Anfang ist es ziemlich egal, vorallem wenn man sich auf die Konsole beschränkt
erst hatte ich einen Kurs java und jetzt ansi-c, ist fast gleich, was die Aufgabenstellungen angeht
erst später, wenn man zu den Eigenarten kommt, wird es sicher etwas anders, aber man kann auch schnell umlernen

C ist relativ hardwarenah, C++ und java sind mehr objektorientiert und damit imo besser für gui geeignet

womit kann man am meisten machen?
mit jeder Sprache hat man nahezu unendlich Möglichkeiten, was ist mehr als unendlich?
jede Sprache hat an anderer Stelle aber ihre Schächen und Stärken

MfG Micha
 
Nein, C ist fast ein subset von C++. Von daher ist es sinnvoll erstmal dieses subset zu lernen, und dann C++. Bei ObjC ist es noch extremer, da ist C ein echtes subset. Sprich ohne C kommt man da nicht weit, bei C++ ist es quasi genauso.
 
Na hier ist ja was los...;D
Tja, ich habe vor ca. zwei Wochen angefangen mich mit C zu beschäftigen und mach auch ganz gut Fortschritte. :) Nur hatte ich relativ wenig Zeit gehabt in der letzten Woche, sodass ich das weiterlernen verschieben musste :( aber es ist ja jetzt Wochenende. :)

Achja, hab mir das Buch "C von A bis Z" von Jürgen Wolf gekauft und kann es echt empfehlen, auch für Fortgeschrittene und Profis als Nachschlagewerk. ;)
 
Es ist meiner Meinung nach nicht notwendig C vor C++ zu lernen, besonders leichter macht es auch einem nicht, man spart keine Zeit.
Man braucht kein C um in C++ zu programmieren, man lernt "automatisch" C durch das Erlenen der C++ Syntax, ohne jedoch die einzelnen C Methoden zu verwenden, was sowieso viel besser ist, viele Leute mischen C mit C++ und wissen es nichteinmal.

C++ hat ihre eignen Wege alle Aufgaben zu lösen und ist nicht auf C angewiesen, außerdem sind die Lösungswege höchst unterschiedlich und sollten der Sprache entsprechend verstanden und befolgt werden.

Was viele Menschen mißverstehen ist, dass die Tatsache, dass man C Header und deren Funktionen auch in C++ integrieren kann nicht bedeutet, dass man es auch tun sollte oder gar, dass es eine gute Lösung ist. Die Option auf C zurückzugreifen ist/war eine Notwendigkeit um den großen Firmen den Umstieg zu ermöglichen, da all ihre eigenen Bibliotheken bisher auf C basierten und das Umschreiben einfach nicht wirtschaftlich gewesen wäre.

Wenn man jedoch sich viel mit Treibern beschäftigen will, besonders auch auf Linux, dann sollte man natürlich sich hauptsächlich mit C beschäftigen.
 
Zuletzt bearbeitet:
Du musst zwischen der Sprache C und der Standard C Library unterscheiden. Ohne C (also die Sprache) kannst du kein C++ machen, ohne die C Lib schon.
 
bei mir wurde java oder c++ als Einführungskurse Wahlpflichtfach angeboten, dann habe ich gewechselt und hier gibt es nur ansi-c
ich habe damals java gewählt und bis auf die pointer ist der Inhalt bisher identisch
für das allgemeine Verständnis, ist es meiner Meinung nach egal, womit man anfängt

in einem anderen Kurs hatten wir assembler und Maschinencode
das macht erst richtig Freude und ist noch näher an der Hardware
jede andere Programmiersprache setzt da auch nur auf

MfG Micha
 
na also C++ bietet schon so einiges mehr als Java. Klar, wenn man asm kennt, sind die Zeiger nicht viel neues (hab auch von c mit asm angefangen, weil mir basic zu beschränkt war).
 
java ist bedeutend einfacher. du hast im gegensatz zu c bei java eine automatische speicher-zuteilung. allerdings kannst du in c mehr machen. ich bin faul und mag deswegen java mehr.
 
Ich kenn Java ;). Vererbung ist in Java zB. einfacher, du hast keine Zeiger, kannst keine Operatoren überladen, keine Templates, usw.
 
Java is auf jeden Fall einfacher und Pointer gibt es, bloß weiß der "Anwender" nichts davon.
Ich verstehe nicht ganz was du damit meinst, dass man die Sprache C für C++ braucht, C++ hat eben in den meisten Fällen (in den Gemeinsamkeiten) die gleiche Syntax, das bedeutet nicht dass man gerade C andwendet, es ist immer noch C++ Syntax.
Oder meinst du etwas anderes?

Sonst könnte man argumentieren, dass Java ohne C++ nicht geht, da Java auch etwas C++ Syntax erbt.
 
Naja "if(a==b) ... ;" ist nunmal C, nicht C++ ;). Bisschen deutlicher wird das vielleicht, wenn du dich ein bisschen mit Sprachen beschäftigst (also kontextfreie, kontextsensitive usw.).
Bei ObjC wird es auch noch deutlicher. Die Sprache selbst besteht eigentlich nur aus ein oder 2 neuen Konstrukten.
 
Zuletzt bearbeitet:
C:
Prozedurale Sprache

Vorteile:
+ Kleiner Sprachkern
+ Flexibel
+ Portabler als Assemblercode :-)
+ Erzeugung von effizientem Maschienencode

Nachteile:
- Mangelde Typsicherheit
- Nicht alle Sprachfeatures exakt definiert (z.B. Auswertung von Ausdrücken, Data alignment, Structure Packing, etc.)
- Unterstützung für objektorientiertes Programmieren fehlt
- Delegation vieler Aufgaben wie z.B. Memory Management an den Programmierer (=> Fehlerträchtig)
- Code ist Teilweise sehr Plattform abhängig (z.B. Compilerdirektiven, Daten Typen)
- Standard Bibliotheken haben gerignen Funktions-Umfang
- Viele Bibliotheken Plattform/OS/Compiler spezifisch
- Geringe Produktivität
- Kryptische und verwirrende Compiler Fehler Meldungen

Einsatzzweck:
- Universalsprache
- Embedded Systeme
- Sprache für OS Entwicklung, wird aber mehr und mehr durch C++ verdrängt.

Mit C hat Programmierer den uneingeschränkten Zugriff auf Zeiger und Speicherstrukturen. Dies ist gleichzeitig die größte Stärke, als auch die größte Schwäche von C!

C++:
Evolution von C mit Unterstützung von Objektorientierung.

Vorteile:
+ Viele Detail Verbesserungen gegenüber C (Klassen, Inline, Namespaces, etc.)
+ Syntax ähnlich zu C (war wichtig um Programierer zum Umstig zu motivieren)
+ Erzeugung von effizientem Maschienencode
+ Sprache per ISO Norm standardisiert
+ Produktiver als C

Nachteile:
- Kein echter Bruch mit überkommenen C Techniken (ich sag nur Preprocessor!)
- Teilweise zu ähnliche Syntax für völlig andere Semantik
- kein Zwang objektorientiert statt prozedural zu programieren
- Viele Compiler setzen die ISO Norm nicht vollständig um
- Standardbibliotheken für gängige Programiertechniken (Directory Access, Threading, etc.) noch immer stark Plattformabhängig
- Erweiterungen von C99 finden sich (noch) nicht in der aktuellen C++ Spec wieder.
- Immer noch Probleme mit der Typsicherheit

Dadurch das C++ die Möglichkeiten von C größtenteils einschliest ist es eine sehr mächtige Sprache. Allerdings kann man sich immer noch sehr leicht ins Bein schießen und auch einige Sprachfeatures sind nicht ganz sauber. Beispielsweise kann man über Mehrfachvererbung sehr geteilter Meinung sein.

Einsatzzweck:
- Universalsprache
- Anwendungsentwicklung

Geht man einen Schritt weiter kommt man zu Java und C#. Beide Sprachen kennen keine Zeiger und besitzen eine automatische Speicherverwaltung. Alleine durch dieses Feature fallen unzählige Fehlermöglichkeiten weg. Strikte Objektorientierung und die sauberen Sprachkonzepte tun ein weiteres. Größter Vorteil beider Sprachen sind die riesigen Klassenbibliotheken. Damit ist man um ein vielfaches Produktiver als mit C++.

Gerätetreiber mögen sich interessant anhören, aber dafür brauchst du mehr als nur perfekte C Kenntnisse. IMHO kein realistisch in 2 Jahren zu erreichendes Ziel.

C++ mag gegenüber Java/C# effizienteren Code erzeugen, aber für normale Anwendungen spielt das längst keine Rolle mehr. Ich rate dir deshalb fang mit Java oder C# an. Die höhere Produktivität macht das bischen Performance locker wett.

P.S. Wenn du dann an die Grenzen stösst kannst du immer noch "Downgraden".
 
Zurück
Oben Unten