Was ist der Grund für die -Wlong-long
gcc-Warnung?
Aus der gcc-Manpage:
-Wlong-long
Warn if long long type is used. This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit the warning messages, use -Wno-long-long.
So wie ich es verstehe, long long
muss mindestens 64-Bit sein (praktisch immer 64-Bit, zumindest bei heutigen Compilern). War dies bei ISO C90 oder C++98 nicht der Fall, oder gibt es einen anderen Grund, es nicht zu verwenden? long long
?
ich weiss Bescheid <stdint.h>
Typen wie int64_t
und Freunde, aber einige nicht so alte Compiler (z. B. VS2005 und Green Hills ARM 3.5) bieten dies nicht <stdint.h>
und ich dachte long long
wären (mindestens) 64 Bit für diese und neuere Toolchains.
Compiler, die das nicht haben
stdint.h
sind nicht C99-konform, was bedeutet, dass es gute Chancen gibt, die sie nicht habenlong long
überhaupt! (Es sei denn, es handelt sich um alte Versionen von GCC.)– zol
21. Juli 2016 um 15:37 Uhr
Aus der gegebenen Beschreibung geht hervor, dass Patricks “nicht so alte” Compiler in der gleichen Kategorie wie ein gcc aus den 90ern liegen –
long long
ohnestdint.h
(außer dass wir die meiste Zeit der 90er Jahre die Entschuldigung hatten, dass C99 noch nicht geschrieben wurde, plus die Entschuldigung, dass “normale” CPUs keine 64-Bit-Ganzzahlregister hatten, also das Fehlen einer 64-Bit-Ganzzahl unter den grundlegenden C-Typen machten Sinn.)– Benutzer2404501
21. Juli 2016 um 16:00 Uhr
@WumpusQ.Wumbley: C wurde entwickelt, um auf 8-Bit-Prozessoren verwendet werden zu können (und wurde in den 1980er Jahren tatsächlich häufig verwendet). Lange Additionen in vier Schritten durchführen zu müssen, war etwas lästig, aber selbst wenn bekannt war, dass Zahlen nicht größer als 16777215 waren, war die Bequemlichkeit, mit einer einzigen Größe arbeiten zu können, den Leistungsverlust durch die Verwendung von vier statt drei Schritten wert. Es gibt weitaus weniger Fälle, in denen die Verwendung eines 8-Byte-Typs gerechtfertigt wäre. IMHO wäre es das richtige Mittel gewesen, “Long Long” zu einem optionalen Feature zu machen, zumindest für freistehende Implementierungen.
– Superkatze
7. September 2016 um 21:16 Uhr