linux-l: C frage

Oliver Bandel oliver at first.in-berlin.de
Mo Apr 13 14:56:41 CEST 1998


Hi!



On Sun, 12 Apr 1998, Ihno Krumreich wrote:

[...]
> Das kann leider sehr gut moeglich sein. Vor kurzem hatten wir den Fall.
> das der Borland C-Compiler ein anderes Ergebnis lieferte als der 
> Microsoft (beide auf Windof), gcc auf Linux und cc Auf Solaris. Es war
> der alte Trick mit dem man Studenten zu verwirren versucht, wenn man eine
> Variable in einem Ausdruck mit Postincrement und Postdecrement behandelt.
> Bei einigen Ausdruecken ist in C nicht eindeutig geregelt in welcher
> Reihenfolge der Ausdruck evaluiert werden muss. An manchen Stellen
> kann einem auch der Optimierer einen Streich spielen. Passiert
> wirklich selten.

> Aber auch heuete sind Compiler noch nicht als
> Fehlerfrei zu betrachten.

Es ist meist kein Problem der Compilerfehler.
Der C-Standard (ANSII) legt nicht alles fest. Die Compiler dürfen
bestimmte Dinge "nach belieben" umsetzen. Wenn man portable Programme
schreiben will, dann sollte man so programmieren, daß alle Programm-
Anweisungen vom C-Standard abgedeckt sind. Den müssen die Compiler
einhalten, wenn sie mit der ANSII-Option laufen; alles, was nicht nach
dem Standard festgelegt ist, können sie handhaben, wie sie wollen.

Bei speziellen Fragen zum C-Standard frage man in de.comp.lang.c nach,
da sind einige Leute, die sich damit sehr gut auskennen und auch eine
gedruckte Ausgabe des C-Standards griffbereit haben.
Wenn man da konkrete Fragen stellt, bekommt man dort die passende
Antwort.


> Moral von der Geschichte: Alzu komplizierte
> Ausdruecke vermeiden.

Kompliziert können sie sei, aber sie sollten Eindeutig nach dem Standard
sein, nicht compilerspezifisch.

Aber übersichtliche Programmierung kann auch nicht schaden ;-)


[...]
> Aber genauer koennte man etwas dazu sagen wenn man weiss worin sich
> diem Ergebnisse unterscheiden (falsche Berechnung, anderes Verhalten der
> Bibliotheksfunktionen ....).

Im Zweifelsfalle implementiert man die Funktion selbst noch einmal.
Das ist zwar umständlich, aber sicher.
Nicht alle Bibliotheks-Funktionen, die einem mitgeliefert werden,
sind nämlich vom C-Standard abgedeckt (z.B. einige der String-Funktionen).


Tschüß,
     Oliver






Mehr Informationen über die Mailingliste linux-l