Hi, normalerweise denke ich, kennt man eine Sprache kennt man alle, oder kann sie zumindest rudimentär. Da ich aber eher aus Entwicklungsfolge Pascal/Delphi/Java/C# stamme hatte ich bisher wenig bis gar nichts mit C zu tun. Auch meine bisherigen drei Versuche, mit der Sprache warm zu werden sind vermutlich anhand meines absolut grottenschlechten C-Buches (Sybex "Erfolgreich programmieren mit C", ca. 1988) gescheitert. Hier kamen Header-Dateien nur an einer einzigen Stelle in einem Nebensatz vor und mehr als eine Quelldatei gab es auch nie. µC habe ich bisher (Atmel Mega / Xmega) mit Assembler beharkt, aber komplexere Dinge sind dann doch etwas unhandlich. Gute Bücher für mich waren für mich in anderen Sprachen bisher z.B. das Kamel "Programming Perl" und "Thinking in Java" Was will ich also: - Ein Buch, mit dem ich sinnvoll C lernen kann, evtl. speziell im (Atmel 8bit / Cortex M0+) µC Umfeld. - Mit einem gewissen Fokus auch auf Dateiorganisation und Strukturen. - Gerne auch mit einer guten Unterscheidung zwischen Sprachelementen und Bibliotheksfunktionen. - Überblick aller Gotchas, wenn man aus der objektorientierten Welt kommt, wie Sichtbarkeiten von Variablen und Eindeutigkeit von Variablennamen Any hints? Danke und mit freundlichen Grüßen Crazy a.k.a. Andreas Wolff
Hm. Ich sach mal vorsichtig, mit der Vorgeschichte wirst du mit C niemals richtig warm werden. Aber egal... Das Standardwerk zur Sprache ist immer noch der Kerningham & Ritchie, 2. Auflage. Oliver
Ohne dich für doof verkaufen zu wollen, aber bücher wie "C für Dummies" sind gar nicht mal so schlecht, da viele Sachen lustig und anschaulich erklärt werden. Alternativ kannst du auch mal bei Hochschulen suchen, die stellen ihre Vorlesungsskripte oftmals online zum download bereit. Andreas Wolff schrieb: > Ein Buch, mit dem ich sinnvoll C lernen kann, evtl. speziell im (Atmel > 8bit / Cortex M0+) µC Umfeld. http://www.amazon.de/Softwareentwicklung-Mikroprozessoren-Mikrocontroller-C-Programmierung-Embedded-Systeme/dp/3800732610/ref=sr_1_1?ie=UTF8&qid=1418141006&sr=8-1&keywords=softwareentwicklung+in+c+f%C3%BCr+mikroprozessoren http://www.amazon.de/Mikrocomputertechnik-Controllern-Atmel-AVR-RISC-Familie-Programmierung/dp/3486589881/ref=sr_1_1?ie=UTF8&qid=1418141034&sr=8-1&keywords=mikrocomputertechnik+mit+controllern+der+atmel+avr-risc-familie Ersteres ist allgemeiner gehalten, ohne auf spezielle Controller einzugehen, letzteres ist speziell für Atmel AVR Controller. Und nicht zu vergessen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Oliver S. schrieb: > Hm. Ich sach mal vorsichtig, mit der Vorgeschichte wirst du mit C > niemals richtig warm werden. Aber egal... Unsinn, wenn er Pascal kann, kann er fast schon C. Nur sind Pointer in Pascal unintuitiver und Call by reference irgendwie fast "magic". Intensiv mit Stringverarbeitung und Pointer/Arrays auseinandersetzen und mehrdimensionale Arrays erst mal weglassen. Der Rest ist wie bai Pascal prozedural und eine Frage der Libraryfunktionen Nur von Java zu C++ ist ein größerer Schritt.
Schau mal in die Öffentliche Bücherei in deiner Nähe! Die haben sicher ein paar Bücher zum Thema. Wenn du eine Universitätsbibliothek in der Nähe hast, kannst du dort (auch als Gastleser) Bücher ausleihen - in der Regel haben die Uni-Bibos einen ganzen Haufen Bücher zum Thema Programmierung.
Und vor allem ausprobieren. Sich einfache Stringverarbeitungsaufgaben stellen und die dann lösen. Evt. auch mal parallel in Pascal und in C. Dann Dinge wie ein Ringpuffer, verkettete Liste, etc. pp. Dann ist das kein Hexenwerk.
Hm, hab mir mal des Buch von Gallileo Press Online angeschaut. Auch hier ist wieder die Hälfte irgendwelche Libraries. CGI und Mysql, naja, den XMega möchte ich sehen... Durch die einfache Sprachsyntax kann ich mich wohl noch durchquälen, aber wie ist das mit der Sichtbarkeit von Variablen etc. Unter c# habe ich meine Klassen, und was ich in den Klassen definieren geht außerhalb niemanden was an. Wie setzt ich so was mit Modulen um. Wo ziehe ich da meine Grenzen und was ist dann wo sichtbar? Welche Namensschemata verwende ich, damit die Variablen Datei/Modulübergreifend eindeutig benannt sind? Ich glaube, meine Fragen drehen sich eher um so "organisatorische" Themen als um die reine Syntax. Also eine "best practice" zur Sprache zu finden. Mit freundlichen Grüßen Crazy a.k.a. Andreas Wolff
Andreas Wolff schrieb: > Unter c# habe > ich meine Klassen, und was ich in den Klassen definieren geht außerhalb > niemanden was an. Du hast deine C Module, und alles was du aussen sichtbar brauchst deklarierst (nicht definierst) du in dem entsprechenden Header File. Nur das ist von aussen sichtbar. Siehe auch static mit seiner Doppelbedeutung (keine geniale Idee der Entwickler): http://en.wikipedia.org/wiki/Static_%28keyword%29
:
Bearbeitet durch User
Selbst im µC-Bereich trifft man häufig auf C++-Compiler. Ich würde zu einer aktuellen Auflage des Standardwerks vom Spracherfinder Bjarne Stroustrup greifen. Er beschreibt auch immer die Unterschiede zwischen C und C++. Mit Deinem Vorwissen in Java und C# solltest Du Dich beim Lernen nicht auf C beschränken, das kannst Du im Zweifelsfall bei der Implementierung auf eingeschränkten Plattformen immer noch tun. http://www.amazon.de/s/url=search-alias%3Daps&field-keywords=9783868940053 Ein großes Problem ist natürlich der fehlende Garbage-Collector im Vergleich zu Java und C#. Wenn Du die Gelegenheit hast, dann lerne unter Linux mit Makefiles und "selbstbestimmten" Aufrufen zum Übersetzen und Linken. Unter Linux kannst Du valgrind benutzen, um zu checken, ob Du Fehler in der Speicherverwaltung gemacht hast - allerdings nur auf x86 bzw, x64. Zur umfangreichen Bibliothek würde ich dies hier empfehlen: The C++ Standard Library: A Tutorial and Reference von Josuttis, http://www.amazon.de/Standard-Library-Tutorial-Reference/dp/0321623215/ref=sr_1_1?ie=UTF8&qid=1418144549&sr=8-1&keywords=the+c%2B%2B+standard+library
Oliver S. schrieb: > Das Standardwerk zur Sprache ist immer noch der Kerningham & Ritchie, 2. > Auflage. Dort steht auch alles über Sichtbarkeit von Variablen etc. Codeorganisation ist kein Hexenwerk, das Schema ist immer das gleiche:
1 | // meinmodul.c
|
2 | |
3 | // Globale Variable im Datensegment
|
4 | // Aus anderen C-Dateien sichtbar
|
5 | int meinmodul_globale_variable; |
6 | |
7 | // Modulglobale Variable im Datensegment
|
8 | // Nur in der aktuellen C-Datei sichtbar
|
9 | static int mg; |
10 | |
11 | // Global sichtbare Funktion ("public")
|
12 | void meinmodul_mach_etwas(void) |
13 | {
|
14 | // Variable im Datensegment, nur in Funktion sichtbar
|
15 | // Behält ihren Wert über Funktionsaufrufe hinweg
|
16 | static int fs; |
17 | |
18 | // Variable auf dem Stack, nur in Funktion sichtbar
|
19 | // Verliert ihren Wert/Gültigkeit am Ende der Funktion
|
20 | int f; |
21 | ]
|
22 | |
23 | // Nur in dieser C-Datei sichtbare Funktion ("private")
|
24 | static void private_funktion(void) |
25 | {
|
26 | }
|
Im Header-File werden alle öffentlichen Funktionen und globale Variablen deklariert. Deren Bezeichner sollten den Modulnamen als Prefix enthalten, um Namenskonflikte zu vermeiden.
1 | // meinmodul.h
|
2 | |
3 | extern int meinmodul_globale_variable; |
4 | |
5 | void meinmodul_mach_etwas(void); |
Das Header-File wird überall eingebunden, wo die Funktionen aufgerufen bzw. die globale Variable genutzt werden sollen. Würde übrigens empfehlen, von Beginn an auf globale Variablen zu verzichten. Dann behält man viel besser den Überblick, welche Programmteile auf welche Daten zugreifen.
Wenn Du ein wenig Zeit hast, dann gib Dir mal diese Rezensionen, wo sich einer an zahlreichen deutschen C-Publikationen so richtig abgearbeitet hat (das Galileo-Buch ist natürlich auch dabei): http://www.amazon.de/gp/pdp/profile/A2P0DS0HZIAYM2/ref=cm_aya_pdp_profile Ich selber finde neben dem K&R das folgende Taschenbuch von einem gewissen Klaus Schröder ziemlich gut (ISBN-10: 3827317584, ISBN-13: 978-3827317582). Es ist aber nur mehr antiquarisch erhältlich: http://www.amazon.de/C-Sonstige-B%C3%BCcher-AW/dp/3827317584 http://www.buchkritik.at/kritik.asp?IDX=1461 http://www.booklooker.de/B%C3%BCcher/Angebote/titel=Nitty+Gritty+C.&autor=Schr%F6der,+Klaus&sortOrder=preis_total Bei zvab wird man auch regelmä0ig fündig. Zu dem Buch gab es auch eine Downloadseite mit Zusatzkapiteln und Lösungen der Aufgaben. Den Addison-Wesley-Verlag gibt es aber leider nicht mehr. Der Verlag ist inzwischen bei Person gelandet. Netterweise hat der (kostenlose) Download diese Veränderungen aber trotzdem überlebt, er findet sich jetzt inklusive Leseproben hier: http://bookshop.pearson.de/main/main.asp?page=deutsch/bookdetails&productid=7367 Leider ist dieser "Max" noch nicht über das Buch hergefallen - ich wäre sehr gespannt, was dabei herauskäme.
Das Buch "C Ent-Packt" von Herbert Schildt fand ich seinerzeit didaktisch auch sehr gut: http://www.amazon.de/C-Ent-Packt-Herbert-Schildt/dp/3826607325/ Auch das hat dieser "Max" bisher noch nicht entdeckt und glücklicherweise also auch noch nicht verrissen, aber vielleicht kommt das ja noch ;-)
Ein Negativbeispiel, obwohl bei Springer verlegt, ist hingegen das Machwerk eines gewissen Schellong.
Hi, erstmal danke für die vielen Vorschläge. Ich hab mit jetzt erstmal das Nitty Gritty C bestellt. für 0,21€ kann man nicht zu viel falsch machen. Dann evtl. noch den K&R. Mit freundlichen Grüßen Crazy a.k.a. Andreas Wolff
Andreas Wolff schrieb: > für 0,21€ kann > man nicht zu viel falsch machen. wohl wahr ;-) Und vergiss die Zusatzdownloads nicht. Wer weiß, wie lange die Sache noch online ist...
Franz Fritz schrieb: > Auch das hat dieser "Max" bisher noch nicht entdeckt und > glücklicherweise also auch noch nicht verrissen Werke von Schildt wurden schon von so vielen so ausführlich verrissen, dass Max sich das erspart hat.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.