nachdem ich ein paar Tage Python gemacht habe, sind mir in c++ anstelle
von double quotes, single quotes um ein String-Literal gerutscht.
Und zwar an einer Stelle, die sowohl ints, als auch QStrings akzeptiert.
Als ich den Fehler gefunden habe, hab ich nicht schlecht gestaunt, dass
es keine Compilerwarnungen gab.
ein testweises
1
autoc='a/a';
bringt zu tage, dass c in dem Fall ein 'int' ist.
WTF
wofür ist das gut?
Ich arbeite nach Jahren mal wieder an einem C++ Projekt und es ist -
nett formuliert - mühsam.
Alleine über "C++ Compiler Konfiguration" könnte man eine ganze
Vorlesung halten.
Da hat bestimmt Apple drauf bestanden.
Mac OS 9 hatte endlos 4-Byte Konstanten als "magic words" in der
resource fork. Wenn ich mich recht erinnere, ist das im Code für HFS+
heute noch ähnlich drin.
Mark B. schrieb:> Vlad T. schrieb:>> naja, der msvc10 mit /W4 sagt gar nix.>> Dann nimm halt einen richtigen Compiler.>> SCNR
Stimmt schon so. Die Compiler von MS sind bis Version 12 absoluter
Schrott, die neueren gerade so akzeptabel. Besser ist es, wenn der OP
clang oder gcc nimmt.
> Implementation defined behaviour ohne Ende.
Das ist der Stolz jedes C/C++ Verfechters. Schliesslich ist das
Weltstandard und kein echter Programmierer will sich irgendwie
einschänken lassen, schon gar nicht von seiner Lieblingssprache.
Im Übrigen ist mein Standard besser als alle anderen zusammen.
Echte Computer sind PCs überlegen schrieb:> Das ist der Stolz jedes C/C++ Verfechters.
Solche Bemerkungen sind der Stolz eines jeden Forentrolls.
Die Crux mit Standards ist es einfach, dass sie, wenn sie auch von
einer Mehrheit akzeptiert werden sollen, mit Kompromissen leben lernen.
Da ist ganz viel “historical precedence” mit im Spiel, es soll das,
was schon immer so gemacht worden ist, eben so festgeschrieben werden,
dass man sich danach auch drauf verlassen kann (oder eben, wie hier,
im Handbuch nachsehen kann, wie's konkret läuft).
Ich erlebe das täglich auf der Austin-Mailingliste („Posix“). Es
schlägt gerade zum vermutlich x-ten Mal jemand vor, dass man doch
wenigstens Newlines aus dem für Dateinamen zulässigen Zeichensatz
verbannen möge. Ich vermute, er wird keinen Erfolg haben, weil es
eben zwar viele gute Gründe dafür gäbe, aber keine einzige
Implementierung, die es derzeit so handhabt. Der Standard fühlt sich
nicht zuständig, den Implementierungen etwas aufzudrängen, was bislang
noch keiner so getan hat …
Gerade auch dank der Kompromissfähigkeit dürfte C eine Akzeptanz
aufweisen, die eben schönere, sauberer gestaltete Sprachen bislang
nicht aufweisen können. Versuche dafür gab's ja durchaus.
Jörg W. schrieb:> Die Crux mit Standards ist es einfach, dass sie, wenn sie auch von> einer Mehrheit akzeptiert werden sollen, mit Kompromissen leben lernen.> Da ist ganz viel “historical precedence” mit im Spiel, es soll das,> was schon immer so gemacht worden ist, eben so festgeschrieben werden,> dass man sich danach auch drauf verlassen kann (oder eben, wie hier,> im Handbuch nachsehen kann, wie's konkret läuft).
Etwas OT: Fefe hatte da die Tage ein schönes Paper verlinkt...
"What every compiler writer should know about programmers
or
“Optimization” based on undefined behaviour hurts performance"
http://www.complang.tuwien.ac.at/kps2015/proceedings/KPS_2015_submission_29.pdf
Man sieht doch auch hier im Forum schoen, wie viele Ingenieure so
ticken. Die Mehrheit ist eben nicht innovativ, sondern
Status-Quo-Bewahrer. Da wird dann bis auf's Messer verteidigt, was man
oft nicht mal selbst verstanden hat...
Vlad T. schrieb:> wofür ist das gut?
Für lesbare 'Kennwörter'. Gab's auch beim Amiga-OS. Hier ist das anhand
der 'Colormap' in einer Bilddatei beschrieben:
https://de.wikipedia.org/wiki/Interchange_File_Format#CMAP-Chunk
Beim Lesen der Datei muss dann kein String ausgewertet werden und man
spart außerdem ein Byte für den Stringabschluss.
Ralf G. schrieb:> Vlad T. schrieb:>> wofür ist das gut?>> Für lesbare 'Kennwörter'. Gab's auch beim Amiga-OS.
Haben denn die damaligen C-Compiler auf dem Amiga (Lattice und Manx)
diese Multi-Byte-Zeichenkonstanten überhaupt schon unterstützt? Aber
selbst wenn: Beim Manx-Compiler war ein int nur 16 Bit groß, so dass da
gar kein FourCC hineingepasst hätte.
Auch auf einem modernen PC funktioniert das nicht wie gewünscht, denn
folgender Code (kompiliert mit GCC) schreibt nicht etwa "CMAP", sondern
"PAMC" in die Datei:
Yalu X. schrieb:> Haben denn die damaligen C-Compiler auf dem Amiga (Lattice und Manx)> diese Multi-Byte-Zeichenkonstanten überhaupt schon unterstützt?
Ich hatte Anfang(*) der 90er 'Maxon'. Das funktionierte.
Yalu X. schrieb:> Auch auf einem modernen PC funktioniert das nicht wie gewünscht, denn> folgender Code (kompiliert mit GCC) schreibt nicht etwa "CMAP", sondern> "PAMC" in die Datei:
... Byteorder. Die war beim Amiga 'andersrum'. Am PC habe ich dann eben
nach 'PAMC' gesucht, um 'CMAP' zu finden ;-)
--------
Hab mal nach dem Handbuch gesehen: war später. Der Compiler war von '96.
Vorher hatte ich mit BASIC gespielt. Da ging das aber auch.