Forum: PC-Programmierung C/C++ Anfänger


von stone (Gast)


Lesenswert?

Hallo,
Ich möchte c bzw c++ lernen.
-macht es sinn mit c anzufangen? oder soll ich gleich mit c++ 
einsteigen?

-welche Bücher könnt ihr mir empfehlen?

Danke im voraus...
stone

von tony (Gast)


Lesenswert?

Was willste denn machen?


Für Mikrocontroller reicht C vollkommen aus.

von stone (Gast)


Lesenswert?

Ich dachte da eher an Pc-programmierung...
habe allerdings keinerlei kentnisse in c bzw c++

von qpops (Gast)


Lesenswert?

Von den beiden ganz klar mit C, zum Anfang ist das Buch "Programmieren 
in C" von K&R keine schlechte Investition.

Je nachdem, was Du aber tatsächlich hinterher damit machen willst, wäre 
vielleicht zum Einstieg eine ganz andere Sprache sinnvoll....

von stone (Gast)


Lesenswert?

An welche dachtest du denn da?
Aus reinem interesse weil mir da nicht einfällt.

von adsf (Gast)


Lesenswert?

Hängt davon ab was du machen willst. Ist aber immer auch eine 
Glaubensfrage, mit was für ner Sorte Sprache man anfängt (hoher vs 
niedriger Abstraktionsgrad etc). Gibts im Netz und auch hier im Forum 
massenhaft Diskussionen dazu ;)

von Sven B. (scummos)


Lesenswert?

Python!

von adsf (Gast)


Lesenswert?

Und es geht los...
Ja, Python ist nett, aber nicht für alles das richtige... @all: können 
wir versuchen auf Empfehlungen zu verzichten bevor wir wissen was der TO 
machen will / schon kann? Sonst artet es nur wieder in eine 
Schlammschlacht aus.

von stone (Gast)


Lesenswert?

Also im Moment bewege ich mich im html bereich und ich wollte einfach 
mal was neues versuchen in dem ich evtl sogar aufgehen kann so wie in 
html...

Danke für die vielen Antworten ;-)

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?


von stone (Gast)


Lesenswert?

Danke

von Sven B. (scummos)


Lesenswert?

adsf schrieb:
> Und es geht los...
Tut mir Leid, das musste einfach sein. ;)

von cppler (Gast)


Lesenswert?

Lerne objektorientierte Programmierung mit C++, dazu den Stroustrup 
kaufen und dann eine passende IDE mit Syntaxhighlight und für 
Window-Programmierung gleich QT nehmen.
C ist bei µCs OK aber auch hier wird schon C++ eingesetzt (vor allem bei 
größeren Controllern wie ARM).

von Gordon (Gast)


Lesenswert?

Wenn Du objektorientiert programmieren lernen möchtest, dann würde ich 
C++ lernen und nicht mit C beginnen, sonst "denkst" Du laufend 
prozedural und programmiert auch so.

Wenn Du Mikrocontroller programmieren möchtest, würde ich C lernen, z.B. 
mit http://ET-Tutorials.de/Mikrocontroller .Dort gibt es einen guten C 
VIDEO-Kurs.

von Robert (Gast)


Lesenswert?

Mit dem bin ich gut zurecht gekommen: C++ Primer
http://www.amazon.de/C-Primer-Stanley-B-Lippman/dp/0201721481

von Gelöscht (kami89)


Lesenswert?

Gordon schrieb:
> Wenn Du objektorientiert programmieren lernen möchtest, dann würde ich
> C++ lernen und nicht mit C beginnen, sonst "denkst" Du laufend
> prozedural und programmiert auch so.

Ich würde genau das Gegenteil empfehlen ;-)
Wer richtig programmieren lernen will, der sollte prozedurale und 
objektorientierte Programmierung beherrschen (richtig verstehen was der 
Unterschied ist, entscheiden wann man besser prozedural, und wann man 
besser objektorientiert programmiert).

Möchte man einfach nur möglichst schnell zu Ergebnissen kommen, fängt 
man besser gleich mit C++ an. Aber ob man dann die Sprache auch wirklich 
verstanden hat, wage ich zu bezweifeln.

Ausserdem ist C++ ja quasi eine Erweiterung von C, daher liegt es 
irgendwie auch relativ nahe, dass man am besten mit den Basics, also C, 
beginnt. Beherrscht man C einigermassen (inkl. Pointern!), kann man auf 
C++ "upgraden" und noch die objektorientierte Programmierung lernen.

Praktisch alles, was man in C lernt, ist ja auch für C++ gültig, ist 
also keine verschwendete Zeit wenn man mit C beginnt und dann auf C++ 
wechselt.

Und zum Schluss dann noch z.B. Qt lernen für die grafische Oberfläche.

von Sven B. (scummos)


Lesenswert?

Ich bin nicht ganz derselben Meinung wie mein Vorrender. Der 
Programmierstil unterscheidet sich schon enorm zwischen C und C++, und C 
und C++ mit Qt sind meiner Meinung nach zwei völlig verschiedene Welten. 
C++ mit Qt und Python mit Qt sind sich jedenfalls ähnlicher als C und 
C++ mit Qt.

von Gelöscht (kami89)


Lesenswert?

Sven B. schrieb:
> Der Programmierstil unterscheidet sich schon enorm zwischen C und C++

Das ist so nicht korrekt.
1
int main(void){int a = 5; return 0;}
War das C oder C++? Siehst du, kann man nicht sagen, da es beides sein 
könnte ;-)

Erst durch die objektorientierte Programmierung entstehen wirkliche 
Unterschiede.

Ich bin aber der Meinung, dass es nicht schadet, wenn man beides 
(prozedural + objektorientiert) beherrscht. Es muss nicht sein, doch ich 
finde, wenn man mit C (prozedural) beginnt, lernt man die Sprache besser 
kennen, weil man eben zwei unterschiedliche Seiten der 
Programmiersprache kennen lernt. OOP/C++ ist auch nicht immer das Mass 
der Dinge (siehe z.B. AVR).

Es ist doch das selbe wie das Programmieren mit Notepad++ und Terminal, 
statt einer kompletten IDE. Ich habe früher auch direkt mit Delphi (OOP) 
angefangen. Ich konnte damit auch lauffähige Programme 
"zusammenbruzzeln". Doch verstanden habe ich das Zeug erst, als wir im 
Studium mit Notepad++ und Terminal begonnen haben.

Pointern bin ich immer aus dem Weg gegangen, weil ich sie nicht 
verstanden habe. Doch als wir im Studium Speicherabbilder usw. 
gezeichnet haben, ist mir das alles klar geworden. Immer mehr wurde mir 
sogar klar, dass das, was ich bisher zu Hause programmierte, eine totale 
"Sauerei" war.

Meine Programme liefen zwar immer, doch die Programmierung war jenseits 
von gut und böse.

Daher meine Empfehlung: Zuerst mit den absoluten Basics beginnen
- Notepad und Terminal bis Präprozessor, Compiler und Linker verstanden
- prozedurale Programmierung (in C) bis Pointer, Structs usw. verstanden
- Wenn das alles klar ist, mit OOP beginnen

Sven B. schrieb:
> C und C++ mit Qt sind meiner Meinung nach zwei völlig verschiedene Welten

C mit Qt machen mMn gar keinen Sinn. Mit Qt würde ich erst beginnen wenn 
man C++ (OOP) im Griff hat, und dann gleich Qt mit C++, nicht mit C.

Wie schon erwähnt: Man kann auch alles im Schnelldurchgang machen und 
gleich mit OOP und hübscher IDE beginnen, doch ob man dann das, was man 
tut, auch wirklich begriffen hat, ist dann eine andere Frage... ;-)
Ist halt die Frage, ob der TO möglichst schnell zu Ergebnissen kommen 
möchte, oder ob er die Programmiersprache verstanden haben möchte.

von Sven B. (scummos)


Lesenswert?

Hi!

Urban B. schrieb:
> Sven B. schrieb:
>> Der Programmierstil unterscheidet sich schon enorm zwischen C und C++
>
> Das ist so nicht korrekt.
>
1
int main(void){int a = 5; return 0;}
> War das C oder C++? Siehst du, kann man nicht sagen, da es beides sein
> könnte ;-)
Nun, klar, das ist aber trivial, weil C eben großteils ein Subset von 
C++ ist ;)
Aber vergleiche mal den Code eines typischen C-Programms (git) mit dem 
eines typischen C++/Qt-Programms (keine Ahnung, kate) -- das ist echt 
völlig anders. [1]

> Ich bin aber der Meinung, dass es nicht schadet, wenn man beides
> (prozedural + objektorientiert) beherrscht.
Da stimme ich auf jeden Fall zu.

> Es muss nicht sein, doch ich
> finde, wenn man mit C (prozedural) beginnt, lernt man die Sprache besser
> kennen, weil man eben zwei unterschiedliche Seiten der
> Programmiersprache kennen lernt. OOP/C++ ist auch nicht immer das Mass
> der Dinge (siehe z.B. AVR).
Ja, schon, aber irgendwie habe ich den Verdacht, dass diese 
Herangehensweise einige Leute auch zu 
ich-erfinde-immer-das-Rad-neu-Programmierern macht...

> Es ist doch das selbe wie das Programmieren mit Notepad++ und Terminal,
> statt einer kompletten IDE. Ich habe früher auch direkt mit Delphi (OOP)
> angefangen. Ich konnte damit auch lauffähige Programme
> "zusammenbruzzeln". Doch verstanden habe ich das Zeug erst, als wir im
> Studium mit Notepad++ und Terminal begonnen haben.
Dass man eine IDE erst dann benutzen sollte, wenn einem klar ist, wie 
man den ganzen Kram, den die tut auch von Hand macht, ist klar. Das ist 
ja fast bei allem so, Tools mit Automatiken sind genau dann wirklich 
gut, wenn man den automatisierten Vorgang auch von Hand selber machen 
könnte.

> Immer mehr wurde mir
> sogar klar, dass das, was ich bisher zu Hause programmierte, eine totale
> "Sauerei" war.
Diese Erkenntnis habe ich seit zehn Jahren regelmäßig ungefähr einmal im 
Jahr. ;)
Ich denke, das gehört dazu beim programmieren.

> Sven B. schrieb:
>> C und C++ mit Qt sind meiner Meinung nach zwei völlig verschiedene Welten
>
> C mit Qt machen mMn gar keinen Sinn.
Ja, geht auch gar nicht, ich meinte <C> und <C++ mit Qt>.

> Wie schon erwähnt: Man kann auch alles im Schnelldurchgang machen und
> gleich mit OOP und hübscher IDE beginnen, doch ob man dann das, was man
> tut, auch wirklich begriffen hat, ist dann eine andere Frage... ;-)
> Ist halt die Frage, ob der TO möglichst schnell zu Ergebnissen kommen
> möchte, oder ob er die Programmiersprache verstanden haben möchte.
Oder man macht beides: Mit allem auf einmal anfangen, aber dann nach ein 
paar Wochen alles wieder beiseite legen und nochmal ganz von vorne 
beginnen. Das ist wahrscheinlich sogar die beste Methode.

Grüße,
Sven

_____
[1] Hört sich sogar deutlich unterschiedlich an, wenn man den Quellcode 
nach /dev/snd cat-et. ;)

von Gelöscht (kami89)


Lesenswert?

Sven B. schrieb:
> Dass man eine IDE erst dann benutzen sollte, wenn einem klar ist, wie
> man den ganzen Kram, den die tut auch von Hand macht, ist klar.

Als Anfänger ist einem das nicht so direkt klar, warum man sich mit 
solchem "Kinderkram" rumschlagen soll wenn es doch dafür eine IDE gibt 
(kann ich aus eigener Erfahrung sagen)^^

Sven B. schrieb:
> Ja, geht auch gar nicht, ich meinte <C> und <C++ mit Qt>.

Ach so, da habe ich dich falsch verstanden :-)

Jup, so gesehen gibt es natürlich grosse Unterschiede, mit <C++/Qt>-Code 
ist man ziemlich schnell mal überfordert wenn man so ein Projekt zum 
ersten mal anschaut :-)

Sven B. schrieb:
> Oder man macht beides: Mit allem auf einmal anfangen, aber dann nach ein
> paar Wochen alles wieder beiseite legen und nochmal ganz von vorne
> beginnen. Das ist wahrscheinlich sogar die beste Methode.

Ich vermute eher, man ist mit der Kombination C++/Qt ziemlich 
überfordert wenn man gleich damit beginnt. Da würde ich dann schon eher 
Schritt für Schritt vorgehen.

mfg

von cppler (Gast)


Lesenswert?

Der Unterschied zwischen prozeduraler und objektorientierte 
Programmierung liegt in der Kapselung welche die Übersicht und einfache 
Erweiterbarkeit verbessert.
Das ein C++ compiler C kann ist klar.
Beispiel:
1
//C-Code
2
static int var=0;
3
4
void setvar(int input)
5
{
6
 var = input;
7
}
8
9
int getvar()
10
{
11
 return var;
12
}
13
14
int main()
15
{
16
 setvar(99);
17
 printf(%d, getvar());
18
}
19
20
//C++ Code
21
22
class var
23
{
24
 private:
25
 int var=0;
26
27
 public:
28
 void setvar(int input)
29
 {
30
  var = input;
31
 }
32
33
 int getvar()
34
 {
35
  return var;
36
 }
37
38
 var(){}
39
 ~var(){}
40
}
41
42
int main()
43
{
44
 new var;
45
 var.setvar(99);
46
 cout << var.getvar();
47
 delete var;
48
}

Eine Klasse kapselt die Prozeduren und durch die Vererbung lassen sich 
bereits bestehende Klassen mit deren Prozeduren einfach weiterverwenden:
1
class morevar : public var
2
{
3
 private:
4
 int morevar;
5
6
 public:
7
 void setmorevar(int input)
8
 {
9
  morevar = input;
10
 }
11
12
 int getmorevar()
13
 {
14
  return morevar;
15
 }
16
17
 morevar(){}
18
 ~morevar(){}
19
}
20
21
int main()
22
{
23
 new morevar;
24
 morevar.setvar(99);
25
 cout << morevarvar.getvar();
26
 morevar.setmorevar(55);
27
 cout << morevarvar.getmorevar();
28
 delete morevar;
29
}

Das geht in C so nicht.

von adsf (Gast)


Lesenswert?

Ob C++ jetzt das beste ist Objektorientierung zu lernen ... zumindest 
für nen Anfänger glaube ich das nicht, da man sich da gleichzeitig mit 
den C-Besonderheiten UND OOP rumschlagen muss. Eine Sprache wie Python 
versteckt da einiges an grundlegendem Kram vor einem, den man auch 
irgendwann lernen sollte, aber dafür kann man sich intensiver mit OOP 
beschäftigen. (Python kann man durch jede höhere Programmiersprache mit 
OOP ersetzen, wobei es da auch durchaus Unterschiede in den 
Möglichkeiten und Konventionen gibt)
OOP "richtig" zu können ist nämlich auch so ne Sache... wobei vermutlich 
die meisten Leute da nicht ewig weit sind und das wohl auch garnicht 
nötig ist fürn Anfang.
Meine Empfehlung wäre daher: C oder C++, aber die Objektorientierung 
erst später wirklich vertiefen, oder dafür eine andere, höhere Sprache 
nehmen (Python. Meinetwegen Smalltalk, das ist sehr "pur" 
Objektorientiert, dafür nicht allzu verbreitet/praktisch anwendbar. ...)
Gibt auch Leute die sagen Funktionale Programmierung leitet einen viel 
besser zur Objektorientierung, aber für einen Anfänger ist das mMn ohne 
passende Betreuung nix.

von cppler (Gast)


Lesenswert?

adsf schrieb:
> Meine Empfehlung wäre daher: C oder C++, aber die Objektorientierung
> erst später wirklich vertiefen, oder dafür eine andere, höhere Sprache
> nehmen (Python. Meinetwegen Smalltalk, das ist sehr "pur"
> Objektorientiert, dafür nicht allzu verbreitet/praktisch anwendbar. ...)

Sehe ich nicht so, denn wenn man von Anfang an OOP betreibt ist das 
sinnvoller als erstmal Prozedural zu lernen um dann die Kaspelung neu 
erlernen zu müssen.
Man könnte auch gleich mit UML und dann in Kombination mit EIFFEL 
arbeiten, nur ist in der Praxis C++ Standard, da C ein Subset ist lernt 
man das auch gleich mit und von der Kapselung abzulassen ist einfacher 
als sie auf prozuderale Programmierung anzusetzen.
Meine Meinung.

von Karl H. (kbuchegg)


Lesenswert?

cppler schrieb:
> adsf schrieb:
>> Meine Empfehlung wäre daher: C oder C++, aber die Objektorientierung
>> erst später wirklich vertiefen, oder dafür eine andere, höhere Sprache
>> nehmen (Python. Meinetwegen Smalltalk, das ist sehr "pur"
>> Objektorientiert, dafür nicht allzu verbreitet/praktisch anwendbar. ...)
>
> Sehe ich nicht so, denn wenn man von Anfang an OOP betreibt ist das
> sinnvoller als erstmal Prozedural zu lernen um dann die Kaspelung neu
> erlernen zu müssen.

Ich seh das eigentlich auch so.
Die Leute, die objektorientiert anfangen wachsen auf natürliche Art und 
Weise in die für OOP notwendige Denkweise hinein. Leute die von der 
prozeduralen Welt kommen, haben deutlich Schwierigkeiten, ihre erlernte 
Herangehensweise über Bord zu werfen, während andersrum mit OOP 
aufgewachsene Leute kaum Schwierigkeiten haben, in die prozedurale 
Schiene einzusteigen. Ganz im Gegenteil gehen sie oft mit viel mehr 
Disziplin und weniger Schweinereien in die prozedurale Welt, weil ihnen 
das Konzept der Daten- UND Funktionskapselung in Fleisch und Blut über 
gegangen ist und sie eigentlich schnell den Dreh heraussen haben, wie 
man auch ohne Compilerunterstützung einige wesentliche Elemente und 
Prinzipien der OOP weiterhin benutzen kann.

Ich schlag mich daher auch auf die Seite: C++ mit einer guten Literatur, 
die einen durch die Materie führt.

Allerdings nur, wenn es um die Fragestellung 'C oder C++' geht.
Wenn die Fragestellung eigentlich lautet Windows Programme zu schreiben, 
dann würde ich (selbst wenn ich eine Abneigung dagegen habe) zu C# 
tendieren. Machen wir uns nix vor. GUI Programme auf Windows brauchen 
eine ordentliche Unterstützung, die zb C# liefern kann.

von Lukas K. (carrotindustries)


Lesenswert?

Man kann auch mit C problemlos objektorientiert Programmieren, wie z.B. 
GTK und der Linux-Kernel beweisen.
1
int *var_new(void) {
2
        return (int*)malloc(sizeof(int));
3
}
4
5
void var_set(int *v, int i) {
6
        *v=i;
7
}
8
9
int var_get(int *v) {
10
        return *v;
11
}
12
13
int var_delete(int *v) {
14
        free(v);
15
}
16
17
int main(void) {
18
        int *z = var_new();
19
        var_set(z, 42);
20
        printf("%d", var_get(z));
21
        var_delete(v);
22
        return 0;
23
}

Ob man nun var_set(z, 42) oder z.set(42) schreibt ist auch nur ein 
kosmetischer Unterschied.

von Sven B. (scummos)


Lesenswert?

Ja, aber Konzepte wie Vererbung sind halt damit schon sehr 
unübersichtlich.

von Karl H. (kbuchegg)


Lesenswert?

Lukas K. schrieb:
> Man kann auch mit C problemlos objektorientiert Programmieren

natürlich kann man.
Genauso wie man mit C++ grauslichen Code produzieren kann.

Aber es macht einen Unterschied, ob ich mich für Selbstdiszipliin 
entscheide (die ich jederzeit über Bord werfen kann, selbst wenn ich es 
nicht merke), oder ob mir der Compiler auf die Finger klopft.

> Ob man nun var_set(z, 42) oder z.set(42) schreibt ist auch nur ein
> kosmetischer Unterschied.

Auch richtig.
Allerdings ist das auch nur der syntaktische Zucker den C++ mit sich 
bringt. OOP ist aber eine Philosophie, eine Denkweise, eine Art wie man 
Programmsysteme entwirft und aufzieht. Und die unterscheidet sich vom 
prozeduralen Ansatz. Hat mich selbst 2 Jahre gekostet, bis ich OOP 
verinnerlicht hatte und in letzter Konsequenz verstanden habe. Nach der 
ersten 1/2 Stunde C++ hatte ich auch das Gefühl, dass objektorientiertes 
Programmieren eigentlich sooo wild auch wieder nicht ist und das ich das 
schnell verstanden haben würde. Das bischen Syntax ..... Nun, gedauert 
hat es dann doch so um die 2 Jahre, bis ich es verinnerlicht hatte. Und 
da hatte ich schon 8 Jahre prozedurales Programmieren am Buckel.

von cppler (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Machen wir uns nix vor. GUI Programme auf Windows brauchen
> eine ordentliche Unterstützung, die zb C# liefern kann.

Jein, ob JAVA oder "JAVA-Clone" C# bleibt sich gleich aber relativ 
Plattform unabhängig und performant ist C++ mit QT.
Ist meine Meinung.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenn die Fragestellung eigentlich lautet Windows Programme zu schreiben,
> dann würde ich (selbst wenn ich eine Abneigung dagegen habe) zu C#

Würde ich dem TE auch Empfehlen (oder Java) C++ und C sind auf dem PC 
aus heutiger Sicht genauso ein Krampf wie früher ASM vs C/C++ (bitte 
nicht hauen-> Überspitzte Formulierung!) gerade wenn der TE:

stone schrieb:
> bewege ich mich im html bereich und ich wollte
> einfach mal was neues versuchen

Wenn man sich dann etwas eingearbeitet hat und Merkt: Ich will doch 
Plattformunabhängig und "lowlevel" mit QT/C++ was machen steht ja einem 
Umstieg nix im Wege (außer das man sehr schnell all die kleinen 
Vereinfachungen vermisst welche einem C#/Java bietet...)

von Sven B. (scummos)


Lesenswert?

Moment, hast du gerade "Qt" und "Low Level" in einem Satz gesagt?
Hast du mal geschaut, was die Qt-API so an Klassen hat?

http://doc.qt.digia.com/qt/qcalendarwidget.html
http://qt-project.org/doc/qt-4.8/qwebview.html
http://doc.qt.digia.com/qt/phonon-videoplayer.html

Wenn das für dich "Low-Level" ist, dann will ich nicht wissen, was "High 
Level" bedeutet? ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.