Forum: PC-Programmierung Suche gutes C/C++ Buch!


von Studi (Gast)


Lesenswert?

Nabend Leute,
bald ist ja wieder Weihnachten und da habe ich mir gedacht kannst dir ja 
auch mal ein Buch schenken lassen. Wobei sich mir die Frage stellt was 
kann man später im Beruf als E-Bachelor besser gebrauchen, C oder C++ 
oder doch gar C#?
Dann stellt sich noch die Frage welches Buch ist überhaupt brauchbar. 
Ich kann sagen Programmierkenntnise sind vorhanden. Also Grundlagen-C, 
Java, PHP, Matlab usw. ...

Wie gesagt am liebsten ist mir ein Buch über eine Programmiersprache die 
ich auch in Zukunft gut gebrauchen kann und wo das Buch sogar evtl. als 
Nachschlagewerk dienen kann.

Vielen Dank schonmal im vorraus. :)

von lager (Gast)


Lesenswert?

Ich finde die "galileo computing" Bücher gut.
Kannst teilweise komplett als OpenBook runterladen und Dir dann doch die 
Papierversion gönnen.

von troll (Gast)


Lesenswert?

Wenn es denn C sein soll und schon Grundlagen vorhanden sind ganz klar 
der K&R.

von Studi (Gast)


Lesenswert?

lager schrieb:
> Ich finde die "galileo computing" Bücher gut.
> Kannst teilweise komplett als OpenBook runterladen und Dir dann doch die
> Papierversion gönnen.

Ja darüber habe ich auch nachgedacht das "C von A bis Z" zu nehmen, dann 
kann man das auch mal in Ruhe gemütlich lesen ohne aufm Bildschirm 
starren zu müssen.

Gibts sonst noch gute Bücher?

Offtopic:
Ich habe mal bei Amazon die allgemein C-Bücher angesehen auch die 
Benutzerwertung. Ist da schonmal jemandem aufgefallen, dass dort immer 
der gleiche Benutzer alle Bücher schlecht bewertet? Aber jedes mal auch 
mit sehr ausführlicher Kritik?

von alesi (Gast)


Lesenswert?

Studi schrieb:
> Gibts sonst noch gute Bücher?

Schau auch mal hier

  http://www.cppbuch.de/

  Der C++ Programmierer das Lehr- und Lernbuch von Ulrich Breymann,
  985 Seiten, mit DVD, Hanser Verlag, 2. Auflage 2011,
  ISBN 978-3-446-42691-7

von (prx) A. K. (prx)


Lesenswert?

Studi schrieb:
> Ist da schonmal jemandem aufgefallen, dass dort immer
> der gleiche Benutzer alle Bücher schlecht bewertet?

Ausgenommen seine, nehme ich an. ;-)

von Sven P. (Gast)


Lesenswert?

Bestes Buch wo gibt..: Prinz, Crawford: C in a nutshell. O'Reilly.

von DirkB (Gast)


Lesenswert?

Studi schrieb:
> Ist da schonmal jemandem aufgefallen, dass dort immer
> der gleiche Benutzer alle Bücher schlecht bewertet? Aber jedes mal auch
> mit sehr ausführlicher Kritik?

Du kannst ja mal bei http://www.c-plusplus.de/forum/f65 reinschauen.
In dem Forum kannst du auch mal nach galileo bzw. dem Autor der Bücher 
suchen.

von Frank M. (aktenasche)


Lesenswert?

der c++ primer ist imho das standardwerk. ich würd dir eher empfehlen c# 
zu machen da die sprache schnell zu erlernen ist und für 
desktopanwendungen super geeignet ist.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

von Rene H. (Gast)


Lesenswert?


von Axel J. (axeljaeger)


Lesenswert?

Straustrup ist meiner Meinung nach das beste für C++, war aber hier eher 
das dritte oder vierte Buch zu dem Thema. Wenn man Staunen will, dann 
den Alexandrescu.

von gdfgdfg (Gast)


Lesenswert?

Finger weg von den Galileo Büchern!!!!! Enthalten viele kleine, nicht 
sofort für Anfänger erkennbare Fehler.
( http://www.c-plusplus.de/forum/272350-full )

Entscheide dich, ob du C oder C++ lernen willst. Klar setzt C++ auf C 
auf, aber wenn du C und C++ als eigenständige Sprachen siehst, kannst du 
viel mehr aus beiden Sprachen rausholen. Die Art und Weise, wie man C++ 
programmiert, unterscheidet sich komplett von C. Wenn du C++ Code 
siehst, der voll mit new/delete ist, kannst du davon ausgehen, dass 
derjenige C++ nicht kapiert hat.

Für C++ würde ich "Der C++ Programmierer" empfehlen.
Wenn du dann mal etwas Erfahrung durch kleinere private 
Programmierprojekte gesammelt hast, kann ich auch noch folgendes 
empfehlen: "Effektiv C++ programmieren".
Das Buch von Bjarne Stroustrup (Erfinder von C++) hab ich auch daheim 
liegen, es liest sich vergleichsweise schwer. Es ist meiner Meinung nach 
nicht als Lehrbuch für Anfänger gedacht. Wenn man dann mal genug 
Erfahrung gesammelt hat, ist es aber durchaus interessant!

Und nochwas: Da hier der Tipp gefallen ist, C# zu verwenden: Ich würde 
davon abraten. Wenn du C++ kannst, kannst du locker auf C# umsteigen. 
Umgekehrt: keine Chance!
C# ist im Gegensatz zu Java nur für Microsoft Betriebssysteme vorhanden 
(Mono kann man für kommerzielle Zwecke vergessen), dir muss also bewusst 
sein, dass du dich mit C# an Microsoft bindest, und jeder möge selber 
entscheiden, ob er seine berufliche Karriere von so einer Firma abhängig 
machen möchte.
Deine Entscheidung, C und/oder C++ zu erlernen ist schon ok, das sind 
nämlich 2 sehr solide Sprachen. Ich hab auch ET studiert, und 
programmiere jetzt in C++ für embedded systems die darauf laufende 
Software, und kann dir sagen: Diese Sprache wird noch lange der Standard 
für embedded systems bleiben.

von avr (Gast)


Lesenswert?

gdfgdfg schrieb:
> Wenn du C++ kannst, kannst du locker auf C# umsteigen.
> Umgekehrt: keine Chance!

Käse. Mit C# lernt man zuerst eine einfachere Sprache und kann damit 
später leichter C++ erlernen. Das ist einfacher als direkt in C++ 
einzusteigen.

von gdfgdfg (Gast)


Lesenswert?

avr schrieb:
> Käse. Mit C# lernt man zuerst eine einfachere Sprache und kann damit
> später leichter C++ erlernen. Das ist einfacher als direkt in C++
> einzusteigen.

Das sind dann die Leute die sich in Firmen als C++ Programmierer 
bewerben und nach kurzer Zeit wieder rausgeschmissen werden weil sie 
einfach nicht in der Lage sind, vernünftig C++ zu programmieren.

In der Arbeit darf ich mich mit folgenden Konstrukten rumplagen:


class xy
{
public:
 T& getT()
 {
  if(m_T==0)
   throw new NullPtrException();

  return *m_T;
 }
 ...

private:
 T* m_T;
};

Ich denke, jeder der C++ kann sieht die Probleme sofort.
Und das auf embedded systems, wo der Kunde dann sagt, die Kiste läuft 
langsam. Naja, warum wohl...

Sowas fabriziert nur ein Java oder C# Progger der meint, dank seiner 
immensen Erfahrung in C# und Java nun auch in C++ so weiterprogrammieren 
zu können.

Daher kann ich jedem, der sich intensiv mit der Programmierung von 
schwachen Rechnern rumplagen will, nur zu C/C++ raten, und nicht zu C#.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hallo,

gdfgdfg schrieb:

> class xy
> {
> public:
>  T& getT()
>  {
>   if(m_T==0)
>    throw new NullPtrException();
>
>   return *m_T;
>  }
>  ...
>
> private:
>  T* m_T;
> };

hmm, Gott sei Dank verdiene ich nicht mein Geld als C++ Programmierer,
was gibt es denn daran, abgesehen von einigen Designentscheidungen, die 
ohne
nähere Informationen nicht zu beurteilen sind, jetzt auszusetzen? Würde 
mich sehr interessieren, denn leider sehe ich  die  Probleme  nicht 
sofort, bitte kläre mich auf!

Vlg

 Timm

von Udo S. (urschmitt)


Lesenswert?

gdfgdfg schrieb:
> Daher kann ich jedem, der sich intensiv mit der Programmierung von
> schwachen Rechnern rumplagen will, nur zu C/C++ raten, und nicht zu C#.

Jeder, der schwache Rechner programmiert sollte von OOP die Finger 
lassen.
Ja man kann mit C++ auch nicht objektorientiert programmieren, aber ist 
das der Sinn? Dann lieber gleich C.
Woher weisst du daß es dem TO um embedded oder gar um 8 Bit µCs geht?

gdfgdfg schrieb:
> Sowas fabriziert nur ein Java oder C# Progger der meint, dank seiner
> immensen Erfahrung in C# und Java nun auch in C++ so weiterprogrammieren
> zu können.
Stimmt, ein C++ Programmierer bekommt vom Compiler umgekehrt sofort auf 
die Finger gehauen, wenn er in Java oder C# versucht schmutzige Tricks 
anzuwenden :-)

Für jedes Problem / Rechnerplattform die passende Sprache wäre meine 
Präferenz.

gdfgdfg schrieb:
> Wenn du C++ Code siehst, der voll mit new/delete ist, kannst du davon
> ausgehen, dass derjenige C++ nicht kapiert hat.

Das hätte ich gerne mal näher erläutert? Bist du sicher daß du C++ und 
nicht C mit ein paar Synatxerweiterungen von C++ meinst?

von Studi (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Woher weisst du daß es dem TO um embedded oder gar um 8 Bit µCs geht?

Es geht mir bei der Entscheidung darum möglichst gut für den Beruf 
vorbereitet zu sein. Daher auch meine Frage was am meisten gebraucht 
wird. Ich denke auch das C++ wohl eher für den PC und C für die Hardware 
geeignet ist.

In C/C++ habe ich schon ein paar Grundlagen gesammelt, aber ich würde 
nicht behaupten wirklich gut C/C++ programmieren zu können. Daher würde 
ich mich mal richtig hinter eine von beiden Programmiersprache hängen um 
auch brauchbare Ergebnise erzielen zu können.

Daher auch die Frage nach einem guten Buch um auch ein solides 
Basiswissen haben und danach auch brauchbare Ergebnise erzielen zu 
können.

von avr (Gast)


Lesenswert?

gdfgdfg schrieb:
> Das sind dann die Leute die sich in Firmen als C++ Programmierer
> bewerben und nach kurzer Zeit wieder rausgeschmissen werden weil sie
> einfach nicht in der Lage sind, vernünftig C++ zu programmieren.

Also jeder der mit c# anfängt kann nicht programmieren oder wie?

> Ich denke, jeder der C++ kann sieht die Probleme sofort.
> Und das auf embedded systems, wo der Kunde dann sagt, die Kiste läuft
> langsam. Naja, warum wohl...

Besser als wenn der Kunde sagt das Programm stürzt dauernd ab. Auf einem 
µC ist es vielleicht verständlich aber auf einem PC birgt das fast keine 
Leistungseinbußen.

> Sowas fabriziert nur ein Java oder C# Progger der meint, dank seiner
> immensen Erfahrung in C# und Java nun auch in C++ so weiterprogrammieren
> zu können.

> Daher kann ich jedem, der sich intensiv mit der Programmierung von
> schwachen Rechnern rumplagen will, nur zu C/C++ raten, und nicht zu C#.

Für µC bin ich ganz klar für C/C++. Beim PC, besonders bei GUIs will ich 
nicht mehr auf den c# Designer verzichten.

von gdfgdfg (Gast)


Lesenswert?

Studi schrieb:
> Es geht mir bei der Entscheidung darum möglichst gut für den Beruf
> vorbereitet zu sein. Daher auch meine Frage was am meisten gebraucht
> wird. Ich denke auch das C++ wohl eher für den PC und C für die Hardware
> geeignet ist.

In den Firmen wird C für Mikrocontroller verwendet, C++ für embedded 
systems, aber auch PC Programme wo es auf die Performance ankommt, und 
PC Programme die portabel sein sollen.
C# ist eher für Desktop Anwendungen geeignet.
Letztlich musst du selbst wissen, in welche Richtung du gehen willst. 
Mit C wirst du keine Geschäftssoftware modellieren, genauso wenig wie du 
einen Mikrocontroller mit C# programmieren wirst.


> class xy
> {
> public:
>  T& getT()
>  {
>   if(m_T==0)
>    throw new NullPtrException();
>
>   return *m_T;
>  }
>  ...
>
> private:
>  T* m_T;
> };
>
>hmm, Gott sei Dank verdiene ich nicht mein Geld als C++ Programmierer,
>was gibt es denn daran, abgesehen von einigen Designentscheidungen, die
>ohne
>nähere Informationen nicht zu beurteilen sind, jetzt auszusetzen? Würde
>mich sehr interessieren, denn leider sehe ich  die  Probleme  nicht
>sofort, bitte kläre mich auf!

Problematisch an dem Code ist folgendes:
1.) Die Membervar. m_T ist als Pointer angelegt. Das heißt, sie kann 
gesetzt sein oder eben auch nicht (ist dann also 0). Es ist 
offensichtlich ein normaler Zustand, wenn die Variable 0 ist. Warum gibt 
man an dieser Stelle nicht einfach m_T zurück? Der Anwender der Klasse 
soll dann selber auf 0 prüfen. Wenn aber eine Exception geworfen wird 
habe ich genau die gleiche Information, nämlich m_T==0, nur mit viel 
mehr Performanceeinbusen, denn ich muss ein try catch machen zum Fangen 
der Exception. Andernfalls mach ich einfach if(ptr!=0).
Da man eine Referenz zurückgibt, hat man von außen vollen Zugriff auf 
die Klasseninternas. So gesehen ist auch das kein Vorteil gegenüber 
einem einfach T* getT(){return m_T;}
2.) Wenn man schon Exceptions verwendet, dann bitte nicht mit new 
werfen. Wehe es wird dann im catch Block nicht ein delete aufgerufen. 
Schon gibt es ein Speicherleck. Außerdem führt das zu ziemlich blöden 
Code:
try
{...}
catch(MyException* e)
{delete e;}
catch(...)
{}
Es ist also nicht möglich, mit einem catch(...) Block alle Esxeptions zu 
fangen, sondern es ist immer eine Sonderbehandlung für die am Heap 
angelegte Exception nötig.


>Jeder, der schwache Rechner programmiert sollte von OOP die Finger
>lassen.
>Ja man kann mit C++ auch nicht objektorientiert programmieren, aber ist
>das der Sinn? Dann lieber gleich C.

C++ bietet weitaus mehr als OOP.
Wirklich langsam wird OOP erst, wenn mans mit den Klassenhierachien 
übertreibt und alles polymorph macht.
Wenn man hingegen OOP verwendet, um z.B. Speicherlecks zu vermeiden, so 
ist mit minimalen Performanceeinbusen sehr viel an Sicherheit gewonnen. 
An der Stelle sind RAII und Smart Pointers zu erwähnen, die meiner 
Meinung nach viele Vorteile bringen.

von gdfgdfg (Gast)


Lesenswert?

Ach und nochwas @Studi: Schau dir auf einer Jobplattform einfach mal an, 
welche Programmiersprachen für welche Aufgaben verwendet werden.
Dann überlegst du dir: Will ich in diese Branche? Wenn ja, dann weißt du 
ja auch schon, welche Programmiersprache du lernen musst, um das zu 
erreichen.

von GUtes Buch (Gast)


Lesenswert?


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.