2009-04-22 5 views
15

Ich möchte etwas guten C/C++ Code studieren. Der Code soll:Vorschläge von ausgezeichneten Beispielen von echtem C/C++ Code

  1. in Stil und Struktur gut sein, Best Practices
  2. präsentierte
  3. ein richtiges Leben Programm sein (kein Beispiel oder Spielzeug)
  4. nicht zu groß, damit es nicht im Alter nicht nimmt zu analysieren es
  5. Windows- und/oder Unix

ich weiß, es ist 1000 von Open-Source-Projekten gibt. Aber ich würde gerne Ihre Vorschläge hören.

Ich bin Java-Programmierer, und ich bin gespannt, wie gutes Projekt in C/C++ ist so strukturiert (Dateien), Granularität der Klassen/Funktionen/Dateien, Dokumentation/Kommentare, Build-Tools usw.

Mehrere Vorschläge zum Beispiel wird begrüßt das ist gutes Windows-Beispiel, das ist gutes reines C etc.

+4

Dies sollte Community Wiki sein. –

Antwort

8

Ich würde speziell memcached. erwähnen Es ist ein großartiges Beispiel für ziemlich kurzen, lesbaren Code mit einem klaren Zweck.

Zweitens würde ich die Apache web server empfehlen. Es ist ein fantastisch gut geführtes Open-Source-Projekt, von dem Sie eine Menge lernen werden, sowohl über die Sprache als auch allgemeine Design-Praktiken und Networking/Threading.

2

Hier ist die main file für relayd, die ein Daemon ist, der Lastverteilung und Failover behandelt. Es ist schön geschrieben, voller Funktionen, sauberer C-Code. Es ist groß genug, dass Sie ein Gefühl für ein Programm der "echten Welt" bekommen, aber nicht so groß, dass Sie es mit etwas Arbeit nicht verstehen. Großartig für sicheren, gut geschriebenen Netzwerkcode, Dämonen usw.

Bescheidenheit beiseite, es gibt auch ein wenig tiling window manager für X, mit denen ich geholfen habe. Es ist ziemlich klein, aber es ist eine echte WM, und die anderen Programmierer haben hohe Standards (und halten Sie mich an sie!) ... Schön für das Erlernen grundlegender X-Sachen.

4

Samba: ein großer, plattformübergreifender (POSIX-basierter), reiner C, sehr beliebter Netzwerkserver.

Samba hat gute developer documentation, und die Codebasis selbst ist sehr gut organisiert; Ich hatte keine Probleme damit, irgendwo in den Code zu tauchen, um eine Frage zu beantworten, die ich über sein inneres Funktionieren hatte, oder um einen Bug aufzuspüren.

3

Ich finde die Implementierung von Lua ist ganz nett C-Quelle. Aber Sprachen sind ein bisschen seltsam als Beispielprojekt.

+0

Viele historische Quellkits (einschließlich der aktuellen Version 5.1.4) finden Sie unter http://www.lua.org/ftp/ und unter http://www.lua.org/source finden Sie eine Webschnittstelle zum aktuellen Quellkit /5.1/ – RBerteig

3

Diomidis Spinellis hat einige Vorschläge in seinem Buch "Code Reading: Die Open-Source-Perspektive", Addison Wesley, 2003. ISBN 0-201-79940-5.

Vielleicht könnte das Buch für Sie nützlich sein.

URL http://www.spinellis.gr/codereading/

3

Google's Chromium ist ziemlich groß, aber sie haben es nicht alle zu schätzen seine saubere, Peer-Review-Struktur zu analysieren. Es ist auch ein gutes Beispiel für die Bereitstellung von Developer-Umgebungen.

+0

danke für den Vorschlag! Ich kann nur eine Antwort als "akzeptiert" markieren, trotzdem ist Ihr Vorschlag das dritte Projekt, das ich untersuchen werde. – k1udge

-1

Sie auf jeden Fall zwischen C oder C++ wählen müssen. Das offensichtliche Beispiel: Gute Praktiken für das Fehlermanagement unterscheiden sich sehr.

+0

Ich habe abgelehnt, weil dies ein Kommentar sein sollte. – nbro

1

K&R hat viele gute Beispiele für echte Programme. Zum Beispiel gibt es auf Seite 115 der zweiten Ausgabe zwei einfache Implementierungen des Befehls echo. Von dort aus könnte es interessant sein zu sehen, wie der Befehl im Laufe der Zeit implementiert wurde. Zum Beispiel gibt es eine Version in der GNU coreutils Quelle. Eine von BSD abgeleitete Version kann in BusyBox Quelle gefunden werden.

Es könnte interessant sein zu sehen, wie die neueren Versionen mit den Lehrbuchbeispielen vergleichen. Warum sind die Programme, die im wirklichen Leben verwendet werden, länger? Wie viel Code bezieht sich auf neue Features und wie viel hängt mit dem Umgang mit Edge Cases zusammen? Wie würden Sie den gleichen Code in Java schreiben?

Verwandte Themen