Forum: Compiler & IDEs C lernen / suche passendes Buch


von Andreas W. (crazywolff)


Lesenswert?

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

von Ernst O. (ernstj)


Lesenswert?


von Oliver S. (oliverso)


Lesenswert?

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

von Kaj (Gast)


Lesenswert?

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

von Udo S. (urschmitt)


Lesenswert?

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.

von Hanns (Gast)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

von Andreas W. (crazywolff)


Lesenswert?

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

von Udo S. (urschmitt)


Lesenswert?

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
von Georg B. (diereinegier)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

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.

von Ivan Kuznec (Gast)


Lesenswert?

Helmut Erlenkötter, C von Anfang an ;-)))

von Franz Fritz (Gast)


Lesenswert?

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.

von Franz Fritz (Gast)


Lesenswert?

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 ;-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein Negativbeispiel, obwohl bei Springer verlegt, ist hingegen das 
Machwerk eines gewissen Schellong.

von Andreas W. (crazywolff)


Lesenswert?

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

von Franz Fritz (Gast)


Lesenswert?

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...

von Tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.