Hi, On Thu, 11 Sep 2003, Ralf Corsepius wrote:
entsprechend zu optimieren.
... und dabei eine Menge alter Code zerbrochen ...
Der war schon immer zerbrochen. Das einzige was in 3.3 dazu kam ist eine Warnung fuer ein paar triviale Faelle.
Wäre es dann nicht besser anstatt einer Warnung einen Error zu erzeugen,
Nein, denn er warnt auch bei Teilen, die nach naeherer Analyse nicht kaputt sind. False warning sind halbwegs okay, false errors sind Fehler.
damit Entwickler, Integratoren und ähnliche Personen entweder bewusst -fno-strict-aliasing verwenden oder aber ihren Code an (!) GCC-3.3 anpassen?
Den Code an C (!) anpassen. Aliasing war in C noch nie erlaubt, nur wurde es mit ISO C99 etwas expliziter in den Standard geschrieben. Und langsam implementieren die Compiler eben auch Optimierungen, die das ausnutzen, was man ausnutzen darf.
So aber rauscht bei während eines stundenlangen Compilerlaufs irgendwo eine "punned pointer" Warnung durch und wird im allgemeinen Warnungsrauschen übersehen.
Tja, dann solltest du vielleicht auch die anderen Warnungen fixen?
4) Wie gesagt, alle betroffenen Stellen, die ich bisher gefunden habe, waren Argumente an "static inline" Funktionen.
Konvertiere ich diese Funktionen nach "extern", tritt die Warnung nicht mehr auf, da dadurch nach meinem Verständnis die Optimierung im GCC nicht mehr aktiv wird, die die Warnung auslöst.
Noe. Ist hoechstens ein Seiteneffekt. Der Code bleibt trotzdem non-C.
Laut Standard ist das Verhalten undefiniert, also waren die GCC-Entwickler frei, das Verhalten für den gcc zu definieren.
Nun ja, die GCC-Entwickler haben schon viele streitbare Entscheidungen getroffen, darunter einige, die ich nicht für unbedingt richtig halte :(
Ich glaube du verstehst nicht. Der union-Hack ist eine pure Freundlichkeit von uns, der sich innerhalb von ISO-C bewegt.
Ich würde hier davon sprechen, dass die Entwickler eine Lücke in den Standards ausnutzen, um einen weiteren GCC-ismus zu implementieren ;-)
Wenn wir diesen Hack nicht haetten, haettest du _gar_ keine Moeglichkeit deinen Code vernuenftig zu fixen.
Aber beide Lösungen *sind unportabel*, sprich bei einem anderen Compiler ist nicht sicher, dass es auch funktioniert.
Kennst Du einen Nicht-GCC C-Compiler, der ähnliche Tricks verwendet? Ich nicht.
Was meinst du? Der union-hack, oder strict aliasing? Union weiss ich nur von intel. strict aliasing hat jeder. Manchmal muss man es mit Optionen einschalten, machmal ist es in der Option drin, die ISO-Konformitaet einschaltet.
Ich kann den Eindruck nicht verwehren, dass GCC und/oder C im Allgemeinen langsam daran ist, einem die alten casting-Tricks zu verleiten, die C zwar unsicher aber auch schnell gemacht haben.
Wie gesagt. aliasing ist sein mind. ANSI C89 nicht erlaubt. Wenn die Leute es in verdammten 14 Jahren nicht schaffen ihren Code zu fixen ... Ciao, Micha.