Sind Typen wie uint32, int32, uint64, int64 in einem stdlib-Header definiert?
Lesezeit: 3 Minuten
philix
Ich sehe oft Quellcode, der Typen wie uint32, uint64 verwendet, und ich frage mich, ob sie vom Programmierer im Anwendungscode definiert werden sollten oder ob sie in einem Standard-Lib-Header definiert sind.
Was ist der beste Weg, um diese Typen in meinem Anwendungsquellcode zu haben?
Es gibt verschiedene andere Integer-Typedefs in stdint.h auch.
Wenn Sie ohne eine C99-Umgebung festsitzen, sollten Sie wahrscheinlich Ihre eigenen Typedefs bereitstellen und trotzdem die C99-Typen verwenden.
Das uint32 und uint64 (dh ohne die _t Suffix) sind wahrscheinlich anwendungsspezifisch.
Diese Antwort ist falsch. Alle oben genannten sind nur verfügbar, wenn ein exakter Breitentyp dieser Größe (keine Polsterung) in der Implementierung vorhanden ist. Auch wenn nicht, jedoch die Typen int_leastNN_t und uint_leastNN_t zum NN 8, 16, 32 und 64 muss immer vorhanden sein. C99 erlaubt keine Implementierungen ohne einen Integer-Typ von mindestens 64 Bit, da long long muss mindestens so groß sein.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
16. Mai 2011 um 13:40 Uhr
@R ..: Wäre es richtig, “POSIX stdint.h” statt “C99 stdint.h” zu sagen?
– mu ist zu kurz
16. Mai 2011 um 16:40 Uhr
Posix stdint.h erfordert sie alle.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
16. Mai 2011 um 17:12 Uhr
@R .., Können Sie diese Antwort bitte auf Richtigkeit bearbeiten? Ich habe ein bisschen gebraucht, um die Kombination aus aktuellem Inhalt und Ihren Kommentaren zu analysieren.
– merlin2011
19. Februar 2017 um 7:24 Uhr
SDL definiert einen solchen Alias typedef uint32_t Uint32; in include/SDL_stdinc.h (wenn Sie SDL-Benutzer sind)
– Et7f3XIV
26. November 2019 um 9:58 Uhr
Diese Integer-Typen sind alle in definiert stdint.h
Ist nicht stdint.h implementierungsspezifisch? Siehe auch diese Frage und diese Frage
– Chris Friedrich
16. Mai 2011 um 4:49 Uhr
Beim Betrachten der Datei habe ich in den Kommentaren “ISO C99: 7.18 Integer-Typen ” gefunden. Ich nehme an, Sie bekommen stdint.h wenn Sie den C99-Standard respektieren.
– philix
16. Mai 2011 um 4:53 Uhr
Ich finde keinen von ihnen darin stdint.h. Dies gibt 0 Treffer zurück: grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_t.
– jww
30. Juli 2016 um 20:57 Uhr
@jww: In meinem Fall enthält diese Datei #include "stdint-gcc.h"und gruppieren das Datei liefert die Definitionen.
– Victor Zamanian
16. August 2016 um 16:57 Uhr
@jww ja, sie existieren nicht. Die einzigen, die Standard sind und dort definiert werden sollten, sind die mit dem _t Suffix, wie in der obigen Antwort aufgeführt.
– Victor Zamanian
16. August 2016 um 23:43 Uhr
Wenn Sie C99 verwenden, schließen Sie einfach ein stdint.h. Übrigens, die 64-Bit-Typen sind da, wenn der Prozessor sie unterstützt.
Bitte zitieren Sie etwas in diesem Zusammenhang.
– BiGYan
16. Mai 2011 um 16:41 Uhr
x86 unterstützt keine 64-Bit-Mathematik, hat aber 64-Bit-Typen.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
16. Mai 2011 um 17:16 Uhr
Ja tut es. Es unterstützt 32-Bit x 32-Bit -> 64-Bit-Multiplikation, 64-Bit / 32-Bit -> 32-Bit-Quotienten- und 32-Bit-Restdivision sowie Addieren mit Übertrag und Subtrahieren mit Borrow-Anweisungen. Es wurde gebaut, um 64-Bit-Arithmetik ausführen zu können, und sei es nur, weil der 8086 in der Lage sein musste, 32-Bit-Arithmetik auszuführen.
– Michael Morris
8. April 2014 um 2:47 Uhr
Da ist auch ein uint128_t wenn __SIZEOF_INT128__ auf 16 oder höher definiert ist (GCC und kompatible). Es ist auf x86_64/amd64-Rechnern verfügbar, aber der Prozessor unterstützt es nicht nativ. Nur Crays haben diese Registergröße, IIRC.
– jww
16. August 2016 um 22:14 Uhr
Der Fragesteller fragte tatsächlich nach int16 (etc) und nicht nach (hässlichem) int16_t (etc).
Es gibt keine Standard-Header – auch keine im /usr/include/-Ordner von Linux, die sie ohne das “_t” definieren.
14215700cookie-checkSind Typen wie uint32, int32, uint64, int64 in einem stdlib-Header definiert?yes