Re: verknuepfte liste umdrehen
- From: Rainer Weikusat <rweikusat@xxxxxxxxxxx>
- Date: Mon, 25 Feb 2008 16:26:57 +0100
JURKSCH@xxxxxxxxxxxxxxx (Hermann Jurksch) writes:
rweikusat@xxxxxxxxxxx wrote:
Inwiefern das eine sinnvolle Entscheidung war, bzw (besser), welche
eher positiven und eher negative Folgen sie hatte, darueber laesst
sich sicher auch diskutieren.
Bist Du sicher, daß man überhaupt irgendwelche Folgen im Vergleich
zur Pascal-Syntax zu verzeichnen hat?
Im Vergleich zur Pascal-Syntax weiss ich das nicht mehr, denn ich habe
seit ungefaer vierzehhn Jahren nichts mehr mit Pascal
programmiert. Zwei Dinge die mehr eher nachteilig erscheinen waeren
- Die Syntax zum Deklarieren von Funktionszeigern:
int *(*func)(int);
deklariert einen Zeiger auf eine Funktion, die einen Zeiger
auf int zurueckgibt und ein int-Argument uebernimmt. Insofern
man func explizit dereferenzieren moechte, ist das konsistent
mit 'declaration resembles use', naemlich
(*func)(4);
fuer einen Aufruf. Die Klammern sind notwendig, weil () eine
hoehere 'precedence' hat, als *. Das die Operatorprioritaet
in einem Ausdruck die Deklarationssyntax beeinflusst, finde
ich nicht so geschickt, zumal die tatsaechliche Benutzung
eher so aussieht:
func(4)
weil die Derefenzierung nicht notwendig ist. Fuer ein
untrainiertes Auge ergeben sich auch schnell verwirrend
aussehende Kombination, aka 'the prototype is complicated by
the level of nested parentheses':
void signal(int, void (*handler)(int))
- Qualifier
const char *a;
deklariert einen Zeiger auf 'const char',
char const *a;
dasselbe und
const char * const a;
einen konstanten Zeiger auf 'const char', funtional identisch
zu
char const * const a;
Man kann das einheitlich machen, in dem man const immer rechts
dessen, worauf es sich beziehen soll schreibt, aber niemand
tut das (in mir bekanntem Code). Zu meiner Ueberraschung ging
der untenstehende Deklarationsblock ohne Beanstandungen durch
den Compiler:
void *ml_ht_find(struct ml_ht_top_dir const *top, void const *key)
{
struct ml_ht_2nd_dir const *dir;
struct ml_ht_chain *chain, * const *chains;
(chains wird einem Member von dir zugewiesen und alles
ausser den Strukuren, auf die die enthaltenen Zeiger
zeigen, soll konstant sein).
Anscheinend habe ich const und die * richtig sortiert, aber
das war auch dass erste Mal, dass ich das ueberhaupt nur
versucht habe, anstatt den Zeiger als **chains zu
deklarieren und den Compiler per cast ruhigzustellen. Ich
schreiben seit (ein paar) Jahren ziemlich viel C
(>> 20.000 Zeilen/ Jahr)
Die Aussage das 'Professor Nikolaus
Wirth es aber anders gemacht hat, also muss das falsch sein' ist zwar
sicher auf eine Mentalitaet gegruendet, die akademischen Karrieren
"vom Wassertraeger zum Vorschriftenmacher" sehr foerderlich ist, aber
fuer ernsthafte Beschaeftigung mit einem Sachthema doch etwas arg
schlicht.
Unterscheiden sich die Typsysteme wirklich signifikant? Eine Bijektion der
'eingebauten' Pascal- und C-Typen gibt es zwar nicht, es ist aber recht
einfach, mit unterstützenden Bibliotheken eine Bijektion zwischen den
Typsystemen herzustellen.
Das kaeme darauf an, was man genau mit 'signifikant' meint. Pascal hat
einen Datentyp 'Menge von etwas' (typischerweise mit 'irgendwelchen
undurchsichtigen Einschraenkungen' aufgrund der Eigenschaften der
Implementierung). Theoretisch unterstuetzt Pascal 'records', deren
Struktur sich in Abhaengigkeit des Inhalts bestimmter andere Felder
aendert, C bloss 'unions', dh Felder unterschiedlichen Typs mit
jeweils identischer Anfangsadresse (praktisch ist beides
dasselbe). Vor allem unterscheidet sich die 'Attituede' des
Typsystems: In C bestimmt der Typ eines Objektes, welche Werte in ihm
(verlustfrei) gespeichert werden koennen, in Pascal bestimmt der Typ
einer Variable, was mit ihrem Wert geschehen darf. Theoretisch ist das
eine Wichtige Eigenschaft Namens Typsicherheit, praktisch ist das eine
Notwendigkeit fuer 'wilde' cast-Konstruktionen, die man sich in C so
ersparen kann.
.
- Follow-Ups:
- Re: verknuepfte liste umdrehen
- From: Hermann Jurksch
- Re: verknuepfte liste umdrehen
- From: Rainer Weikusat
- Re: verknuepfte liste umdrehen
- From: Markus Wichmann
- Re: verknuepfte liste umdrehen
- References:
- verknuepfte liste umdrehen
- From: Clemens Blank
- Re: verknuepfte liste umdrehen
- From: Felix M. Palmen
- Re: verknuepfte liste umdrehen
- From: Markus Wichmann
- Re: verknuepfte liste umdrehen
- From: Dirk Clemens
- Re: verknuepfte liste umdrehen
- From: Felix M. Palmen
- Re: verknuepfte liste umdrehen
- From: Hermann Jurksch
- Re: verknuepfte liste umdrehen
- From: Rainer Weikusat
- Re: verknuepfte liste umdrehen
- From: Hermann Jurksch
- verknuepfte liste umdrehen
- Prev by Date: Dein C-Problem - FAQ-Info in de.comp.lang.c
- Next by Date: Re: verknuepfte liste umdrehen
- Previous by thread: Re: verknuepfte liste umdrehen
- Next by thread: Re: verknuepfte liste umdrehen
- Index(es):
Relevant Pages
|