Bücher über C-Idiome

06/12/2008 - 19:55 von Michael Schuerig | Report spam
Dass ich etwas ernsthafter in C programmiert habe, liegt etwa 15 Jahre
zurück. C++ war mir damals lieber und mit der Zeit sind es über Java
noch dynamischere Sprachen geworden. Nun aber soll es wieder mal etwas
in C sein. Was mein Verstàndnis von C angeht, so ist es für mich
derzeit ein defizitàres C++, aber das wird der Sprache natürlich nicht
gerecht. Um mich gewàhlt auszudrücken, bràuchte ich objektorientierte
Sprachmittel, die es in C aber nicht gibt. Also möchte ich lernen, wie
ich mich ohne solche Mittel idiomatisch in C ausdrücke.

Ein Beispiel. In einem Buch[*] bin ich auf eine Beschreibung gestossen,
wie generische doppelt verkettete Listen (include/linux/list.h) im
Linux Kernel implementiert sind. Die Idee ist, dass die
Verkettungsstruktur in die Containerstruktur der zu verkettenden
Elemente eingebettet wird. Aus einem Zeiger auf die Verkettungsstruktur
wird über Offsetberechnungen der Zeiger auf die Containerstruktur
rekonstruiert.

Ob das nun gut ist oder nicht, ich wàre nicht auf die Idee gekommen.
Solche Idiome möchte ich lernen, idealerweise komprimiert in einem
Buch. Ich freue mich über Empfehlungen.

Michael


[*] Wolfgang Mauerer, Professional Linux Kernel Architecture, Wrox 2008

Michael Schuerig
mailto:michael@schuerig.de
http://www.schuerig.de/michael/
 

Lesen sie die antworten

#1 ram
06/12/2008 - 20:22 | Warnen spam
Michael Schuerig writes:
Die Idee ist, dass die Verkettungsstruktur in die
Containerstruktur der zu verkettenden Elemente eingebettet
wird.



Diese Wahl, ob Objekte durch externe oder interne Strukturen
verbunden werden, hat man immer, wenn man eine verkettete
Datenstruktur implementiert.

Siehe auch

http://de.wikibooks.org/wiki/Algori...turen_in_C:_Verkettete_Listen
http://www.mxdt.de/davread/Studies/...n_in_C.pdf
http://www.netzmafia.de/skripten/ad/ad10.html
http://www.linuxjournal.com/article/6828
List Processing / J. M. Foster. - London: Macdonald, 1969.
Listenverarbeitung / J. M. Foster. - München: Carl Hanser, 1970.

. Diese Wahl der Implementation von Listen hat man auch in C++
oder Pascal oder Maschinensprache. Wenn Du darüber etwas
lernen willst, dann interessieren Dich »Algorithmen und
Datenstrukturen«. Das erscheint mir nicht als C-spezifisch.

Ein C-Idiom wàre beispielsweise so etwas wie »while( *q++ = *p++ );«,
wobei die Abgrenzung zu C++ hier nicht ganz scharf verlàuft,
da praktisch alles in C Mögliche auch in C++ möglich ist.
Aber solche C-Idiome haben jedenfalls nicht direkt mit der Frage
der Implementation von Listen zu tun.

Es gibt natürlich dann Schreibweisen von Listen-Algorithmen,
die in C gewissermaßen idiomatisch sind, etwa um das Ende
bestimmer Listen zu finden: »while( this =( last=this )->next );«,
wenn ich mir das jetzt nicht falsch überlegt habe. Immerhin
könnte man /das/ so nicht in C++ schreiben, da dort »this« wohl
ein Schlüsselwort ist.

Ähnliche fragen