PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Literaturempfehlung für C und C++


Dr.Doom
2012-11-08, 19:41:50
Howdy!

Ich suche ein detailiertes C-Buch in dem mich von den Grundlagen nur die Zeigerarithmetik interessiert. Hauptsächlich Algorithmen (zB Sortieren mit C) und Datenstrukturen (Listen, Stacks, Bäume usw in C) sind von besonderem Interesse. Der übliche Teil, der "Das ist eine For"-Schleife und das ein "If-Else"-Konstrukt abhandelt, darf sehr kurz ausfallen. Also nicht sowas wie "C für Dummies", sondern einen oder zwei Level höher.


Dann suche ich im Prinzip dasselbe nochmal für C++. Die Algorithmen & Datenstrukturen sollten nun mit STL-Werkzeugen gezeigt werden. Zusätzlich möchte ich etwas zu Dialog- und einfacher Grafikprogrammierung haben (kein 3D, nur auf Panels/Panes/blubb geometrische Figuren, Sinuskurven, Skalen zeichnen).
Was ich überhaupt nicht brauche ist: Netzwerk-/Internet-/Datenbank-Programmierung.


Die Bücher können in Deutsch oder Englisch geschrieben sein.
Genutzte Werkzeuge: Visual Studio 2010

Wenn's zu STL und Grafik erwähnenswerte dedizierte Bücher gibt, supi, bitte vorschlagen. Das Grafikbuch darf dann auch von der Art "Grafikprogrammierung mit C++ für Dummies" sein. *g*

Ich bedanke mich für Vorschläge!

Simon
2012-11-08, 22:32:06
"Accelerated C++' - bestes C++-Buch ueberhaupt. Meine Studenten haben's auch geliebt =) Ist Compiler-unabhaengig, erklaert also nicht wie man Visual Studio bedient.

Milton
2012-11-08, 22:58:15
Fuer C: Das Original: "The C Programming Language" von Kerninghan und Ritchie ist auf alle Faelle immer noch lesenswert und erklaert Zeiger recht gut, iirc. Aber wahrscheinlich kennst Du das ja eh schon.

Odal
2012-11-08, 23:02:19
also wenn du ein C++ Grundlagen+Advanced Buch suchst und das dabei in Deutsch bevorzugst dann würde ich dir Ulrich Breymann "Der C++ Programmierer" empfehlen (imho das beste dt. C++ Buch für den Einstieg bis Fortgeschritten).

Das geht aber nicht bis ins kleinste Detail in STL etc. ein.

Wenn du dann wirklich wissen willst welche Container wann am "besten" sind (und vorallem warum) dann lies noch zusätzlich Scott Meyers "Effective STL"

zur dialog und grafikprogrammierung musst du erstmal wissen was für ein widget system du nimmst oder ob du .net benutzen willst

Kenny1702
2012-11-09, 11:45:38
Die Effective-Reihe gefällt mir sehr gut. Die Bücher aus der Reihe sind aber keine Grundlagenbücher.

Als Grundlagenbuch werfe ich noch The C++ Standard Library SE in den Raum, das auch C++ 11 umfasst.

hell_bird
2012-11-09, 14:16:24
Ich suche ein detailiertes C-Buch in dem mich von den Grundlagen nur die Zeigerarithmetik interessiert. Hauptsächlich Algorithmen (zB Sortieren mit C) und Datenstrukturen (Listen, Stacks, Bäume usw in C) sind von besonderem Interesse. Der übliche Teil, der "Das ist eine For"-Schleife und das ein "If-Else"-Konstrukt abhandelt, darf sehr kurz ausfallen. Also nicht sowas wie "C für Dummies", sondern einen oder zwei Level höher.

Ich kann auch das Buch von Kerninghan und Ritchie empfehlen, bin mir aber nicht sicher ob du das suchst. Zeigerarithmetik ist an sich sehr leicht, dafür wirst du mit Sicherheit eine Anleitung im Internet finden. In der Anwendung brauchen Zeiger ein wenig Übung, da würde ich aber kein Buch sondern learning-by-doing empfehlen. Ich hatte zum Beispiel neulich einen Knoten im Hirn, als ich einen pointer auf ein Element eines STL vectors gesetzt hatte und mich dann gewundert habe, dass ab und zu Datenmüll gelesen wurde.

Bei den Algorithmen und Datenstrukturen geht es dir dabei darum wie sie in C umgesetzt werden (sehr einfach) oder wie sie intern funktionieren (welcher Sortieralgorithmus ist wann optimal, wie baut man möglichst balancierte Bäume).


Zusätzlich möchte ich etwas zu Dialog- und einfacher Grafikprogrammierung haben (kein 3D, nur auf Panels/Panes/blubb geometrische Figuren, Sinuskurven, Skalen zeichnen).

Hier könntest du dich in WPF einlesen. Das bietet sich an wenn du mit Visual Studio programmierst und nimmt dir bei Vektorgraphik eine Menge Arbeit ab.

Gast
2012-11-10, 23:52:29
Ben Klemens, "21st Century C: C Tips from the New School"

Gast
2012-11-11, 13:49:24
C++ Primer Plus
http://www.amazon.com/Primer-Plus-Edition-Developers-Library/dp/0321776402/ref=sr_1_1?ie=UTF8&qid=1352637905&sr=8-1&keywords=c%2B%2B+primer+plus

Geht sehr ins Detail und erklärt auch schön alle Neuheiten von C++11. Der Detailgrad kann allerdings auch ein Manko sein. Ich hab bei mir gemerkt, dass es dann eventuell etwas langweilig wird.

Für GUI etc. würd ich dann extra Literatur empfehlen und das nicht in einem Buch vereinen. Zuvor die Grundlagen und dann alles Weitere.

Außerdem würd ich davon abraten zuerst C zu lernen, wenn dus nicht explizit brauchst und eher gleich mit C++ zu beginnen.

Dr.Doom
2012-11-13, 14:25:56
Danke für die Tipps!

Ich bin vergangene Woche in der Stadtbibliothek gewesen und hab' mir erstmal ein Exemplar von "The C Programming Language" (K&R) und "C für Profis" (Markt&Technik, inkl. 5,25" Floppydisk ;) ) geholt.
Letzteres hat auch ein Kapitel über Grafik.

Gast
2012-12-12, 19:29:45
Sowas natürlich ebenfalls nicht vergessen! :D
http://blog.fefe.de/?ts=ae3606aa

Exxtreme
2012-12-12, 20:49:36
Sowas natürlich ebenfalls nicht vergessen! :D
http://blog.fefe.de/?ts=ae3606aa
Nur war der C++-Programmierer wahrscheinlich 10x so produktiv als fefe mit seinem Assembler oder C. Das unterschlägt man bei solchen Vergleichen nämlich immer. Und dann 490 kb gespart, juhuuu!

Tesseract
2012-12-12, 21:53:43
Nur war der C++-Programmierer wahrscheinlich 10x so produktiv als fefe mit seinem Assembler oder C.
und wenn er nicht SEHR genau aufpasst ist die c++-version vielleicht sogar scheller und mit ziemlicher sicherheit fehlerfreier und leichter erweiterbar.

Simon
2012-12-12, 22:09:30
mit ziemlicher sicherheit fehlerfreier und leichter erweiterbar.
Als ob das von der Sprache abhaengt. Wenn da einer was zusammenwuerfelt, ist nix mit "leichter erweiterbar" oder "fehlerfreier", egal ob C, C++ oder sonstwas.

Dr.Doom
2012-12-12, 22:34:58
Sowas natürlich ebenfalls nicht vergessen! :D
http://blog.fefe.de/?ts=ae3606aaNaja, wenn man Code produziert, der nicht mit einer 1, sondern mit einer bezahlten Rechnung belohnt wird, dann kann man sich solche Sichtweisen nicht immer leisten. :freak:

Gast
2012-12-12, 22:41:37
Ich dachte ja immer, ich hab die 8GB gekauft, weil das für mich bestens wäre. Sagt das virale Marketing in den Foren jedenfalls.
Aber jetzt sehe ich, ich hab aufgerüstet, damit die Programmierer zeiteffizienter Arbeiten können und Programmen ggbf. einfacher weiter upbloaten können.

Damit also die Softwareschmieden weniger Entwicklungskosten haben und sie mir die Soft zum mind. gleichgebliebenen Brotequivalent verkaufen können.
Ich hab die 8GB also primär eingebaut, damit die mit mehr Einnahmen als früher erwirtschaften können, falls ich solche Soft nutzen möchte. Verdammt klever...

Sonst hat sich ja nicht viel geändert. Gefühlt fällt es mir beim Updaten nicht auf, daß die Buganzahl pro Release in all den Jahren bei >10MB Installern gesunken ist.
Bei großen Projekten wird so ein Overhead irgendwannmal nicht mehr erwähnenswert. Kollege fefe spricht aber von einem 500KB Projekt den man in 10KB unterbringen könnte. Oder schlicht leiber in Java (unter Win also auch .Net) schreiben sollte.

Der Meinung bin ich auch. Wenn man SO in C(++) programmiert, kann man es genauso auch gleich in .Net machen.

Die Entwicklung des Lada Samara hat 1/20stel der Zeit gekostet wie die des Golfs 2. Und der Hobel kann alles wofür ein Auto gedacht ist. Nur ist es schwer einem Europäer ein Samara zu verkaufen, indem man mit der Produktivität der Lada-Ingenieure wirbt.

Bei Software ist es anders. Man sieht nur die GUI, die Daten des TaskManagers analysiert man auch nie, 2x 4GB kosten nichts, 2 Kerne sind der allerunterster Standard und Preise der Datenträger haben sich auch wieder halbwegs eingependelt.
Also, die Hardware kauft man nur sekundär für sich. Primär kauft man sie um den Softwareschmieden eine größtmögliche Produktivität zu ermöglichen.

Gelegentlich hat man aber noch die Wahl, ob man seinen Anmeldehintergrundbild mit TweakLogon (900KB entpackt, Version 1.2, ohne Installer, mit Vorschaufunktion, rechnet das Bild ggbf. neu um) oder mit LogonScreen (aktuelle Version 2.55 :D und mit 2.1MB Installer).

Ich denke wenn der Typ von TweakLogon mit seinen Methoden auf v2.55 kommen wollen würde, hätte er sonst nur noch Zeit fürs Essen und Shicen. Wogegen der von LogonScreen bestimmt noch mehreren anderen Hobbys locker fröhnen kann. Produktivität eben.

Ciao.

p.s.:
http://de.ria.ru/politics/20121210/265113137.html

Exxtreme
2012-12-12, 23:12:46
Das ist richtig. Der Punkt ist, 8 GB RAM kosten viel weniger als Mannstunden/Wochen/Monate reinzustecken. Als RAM noch sündhaft teuer war da verhielt es sich umgekehrt. Da hat man auf Teufel komm raus optimiert damit das Programm weniger Speicher braucht. Das Y2k-Problem resultiert auch draus, weil man meinte unbedingt Speicher sparen zu müssen. Die Rechnung wurde dann später präsentiert.

Ach ja, ich wette, das Progrämmchen von fefe hat nur recht viel Code reingelinkt, der nie aktiv wird. Das haben die Linker so an sich. Da gibt es aber Tools wie Upx (http://upx.sourceforge.net/), welche die Programme verkleinern. Da dürfte auch fefe zufrieden sein. ;)

Tesseract
2012-12-13, 00:54:00
Als ob das von der Sprache abhaengt.
natürlich hängt das von der sprache ab. sprachparadigmen alleine sind dafür natürlich nicht hinreichend aber definitiv förderlich, deswegen gibt es sie ja.

Gast
2012-12-13, 09:47:04
Das ist richtig. Der Punkt ist, 8 GB RAM kosten viel weniger als Mannstunden/Wochen/Monate reinzustecken. Als RAM noch sündhaft teuer war da verhielt es sich umgekehrt.Hat so ein bloat-code aber nicht auch etwas mit caches, cache-misses, speculation usw. usw. zu tun? Vielleicht bekommen wir den schönen alten Trend zur effizienten und nicht nur produktiven Programmierung wieder zurück.

RAM ist zwar billig geworden, sündhaft teuer wird langsam aber der Strom aus der Steckdose. Die Akkulaufzeit war es eh schon immer gewesen.

Gast
2012-12-13, 11:28:09
Welche Umgebung würdet ihr für LErnwillige empfehlen? Ich hab noch in Erinnerung, daß MSVC immer sehr lasch war. Z.B.

void func1( void ) {
if( func2() ) {
char buf[1000000];
func3( buf );
}
}

GCC und IntelC fressen das problemlos. Mit MSVC (2005) macht sich das lang, weil es für buf mit func1 alloziert und func2 dann der stack ausgeht. Sind solche Blüten immernoch anzutreffen?

Ich bin irgendwannmal auf gcc gegangen und auch den Ochsenweg mit dem Basteln eines brauchbaren IDE, weil mich solche und ähnliche Sachen tierisch nervten. Und Unmengen Zeit gekostget haben :(

Mir ging es damals ums Programmieren und nicht um Rumgeklicke in der zugegeben sehr brauchbaren IDE des MSVC. Seitdem hab ich mich nicht mehr so sehr mit MSVC beschäftigt. Welchen ruf hat das aktuell in der Hardcorescene? =)

Tesseract
2012-12-13, 12:52:45
Hat so ein bloat-code aber nicht auch etwas mit caches, cache-misses, speculation usw. usw. zu tun?
durch das lokalitätsprinzip macht das kaum einen unterschied.

Exxtreme
2012-12-13, 14:28:29
Als ob das von der Sprache abhaengt. Wenn da einer was zusammenwuerfelt, ist nix mit "leichter erweiterbar" oder "fehlerfreier", egal ob C, C++ oder sonstwas.
Klar hängt es von der Sprache ab. Hier gibt es z.B. eine nette Untersuchung:
http://www.spinellis.gr/pubs/conf/2012-PLATEAU-Fuzzer/pub/html/fuzzer.html



Hat so ein bloat-code aber nicht auch etwas mit caches, cache-misses, speculation usw. usw. zu tun? Vielleicht bekommen wir den schönen alten Trend zur effizienten und nicht nur produktiven Programmierung wieder zurück.

RAM ist zwar billig geworden, sündhaft teuer wird langsam aber der Strom aus der Steckdose. Die Akkulaufzeit war es eh schon immer gewesen.
Wie schon geschrieben, das Meiste aus so einer C++-Exe ist zwar reingelinkt, aber nicht aktiv. Leider sind die meisten Linker ziemlich "dumm" und lassen das Zeug nicht weg was nicht benötigt wird.
Welche Umgebung würdet ihr für LErnwillige empfehlen? Ich hab noch in Erinnerung, daß MSVC immer sehr lasch war. Z.B.

void func1( void ) {
if( func2() ) {
char buf[1000000];
func3( buf );
}
}

GCC und IntelC fressen das problemlos. Mit MSVC (2005) macht sich das lang, weil es für buf mit func1 alloziert und func2 dann der stack ausgeht. Sind solche Blüten immernoch anzutreffen?

Ich bin irgendwannmal auf gcc gegangen und auch den Ochsenweg mit dem Basteln eines brauchbaren IDE, weil mich solche und ähnliche Sachen tierisch nervten. Und Unmengen Zeit gekostget haben :(

Mir ging es damals ums Programmieren und nicht um Rumgeklicke in der zugegeben sehr brauchbaren IDE des MSVC. Seitdem hab ich mich nicht mehr so sehr mit MSVC beschäftigt. Welchen ruf hat das aktuell in der Hardcorescene? =)
Das ist halt C und da hat MS noch nie geglänzt. Ich glaube, die unterstützen nicht einmal C 99 gescheit und das seit Jahren nicht. Von daher, wenn man C will dann lieber was anderes nehmen.

Gast
2012-12-13, 14:54:19
Wie schon geschrieben, das Meiste aus so einer C++-Exe ist zwar reingelinkt, aber nicht aktiv. Leider sind die meisten Linker ziemlich "dumm" und lassen das Zeug nicht weg was nicht benötigt wird.Könnte es denn sein daß fefe genau draum ging? ;) Warum sollte man immer annehmen, jeder der sich an sowas stört ist sofort ein gestriger asm-hacker?

Das hinterherrennen der n00bs hinter den compiler Optimierungen nervt mich auch langsam. Man sollte langsam anfangen die Linker intelligenter zu machen und nicht manwochen zu opfern um mit wilden flags cpu-spezifische Optimierungen um 1.5% zu beschleunigen.

Gast
2012-12-13, 15:00:29
Klar hängt es von der Sprache ab. Hier gibt es z.B. eine nette Untersuchung:
http://www.spinellis.gr/pubs/conf/2012-PLATEAU-Fuzzer/pub/html/fuzzer.htmlWow. Wrong output bei C um paar Prozent höher, dafür successful compile und successful run jeweils fast um 1/3 höher als bei C++ ;)

Oder deute ich es falschrum? =)

Exxtreme
2012-12-13, 15:27:02
Könnte es denn sein daß fefe genau draum ging? ;) Warum sollte man immer annehmen, jeder der sich an sowas stört ist sofort ein gestriger asm-hacker?

Das hinterherrennen der n00bs hinter den compiler Optimierungen nervt mich auch langsam. Man sollte langsam anfangen die Linker intelligenter zu machen und nicht manwochen zu opfern um mit wilden flags cpu-spezifische Optimierungen um 1.5% zu beschleunigen.

Ich sag ja nicht, dass fefe ein gestriger Asm-Hacker ist. Nur sehe ich das so: hätte ein "intelligenter" Linker echte Vorteile dann hätte man sowas schon längst gemacht. Anscheinend haben 1,5% mehr Compiler-Optimierung mehr Vorteile als paar Hundert kb gesparter Speicher auf der Platte.

Wow. Wrong output bei C um paar Prozent höher, dafür successful compile und successful run jeweils fast um 1/3 höher als bei C++ ;)

Oder deute ich es falschrum? =)

Ne, das passt so.

Marscel
2012-12-13, 16:10:03
Klar hängt es von der Sprache ab. Hier gibt es z.B. eine nette Untersuchung:
http://www.spinellis.gr/pubs/conf/2012-PLATEAU-Fuzzer/pub/html/fuzzer.html

Geil, hats wieder ne wissenschaftliche Arbeit benötigt um rauszufinden, dass Sprachen ohne starke Typisierung zur Compilezeit weniger meckern und dabei öfter zur Laufzeit fehlschlagen. :ulol:

Gast
2012-12-27, 22:14:20
Ich bin der Meinung, man landet erstmal irgendwie doch beim GCC. Ich will aber nicht für die eine Kleinigkeit Berge vom Zaun zu brechen (geil) sondern würde das gerne hier nur kurz zwischenschieben.

Kann man unter GCC mit cflags einen unschuldigen ANSI-C mit CPU-spezifischen defekt optimieren lassen? Ich meine, mit zu der CPU passenden.
Ich hab grad beim i5-2500k aus Jux -mavx reingeschoben und die Soft mault sich bei EINIGEN Funktionen völlig.

Marscel
2012-12-28, 02:52:52
Ich hab grad beim i5-2500k aus Jux -mavx reingeschoben und die Soft mault sich bei EINIGEN Funktionen völlig.

Vielleicht mal mit -S gucken, was der GCC für Instruktionen anlegt? Einen minimalen Testcase erstellen, der das reproduziert.