Ersetzen von Tabulator durch Leerzeichen
-
DirkB schrieb:
__x86_64__ ist bei Visual-Studio nicht definiert.
Hast recht, habe noch die Prüfung auf
_M_X64
eingefügt und%I64u
verwendet.DirkB schrieb:
long
ist auch auf Windows bei 64-Bit-Programmen "nur" 32-Bit groß.
size_t
ist aber auf Windows bei 64-Bit-Programmen durchaus 64-Bit groß.Das weiß ich. Deswegen verwende ich auch nur size_t.
-
dachschaden schrieb:
DirkB schrieb:
__x86_64__ ist bei Visual-Studio nicht definiert.
Hast recht, habe noch die Prüfung auf
_M_X64
eingefügt.Dann ist das immer noch falsch.
dachschaden schrieb:
DirkB schrieb:
long
ist auch auf Windows bei 64-Bit-Programmen "nur" 32-Bit groß.
size_t
ist aber auf Windows bei 64-Bit-Programmen durchaus 64-Bit groß.Das weiß ich.
Anscheinend nicht. %lu steht für
unsigned long
.
Was hat das mitsize_t
zu tun, wenn _M_X64 definiert ist?
Und was hat %u mitsize_t
in den anderen Fällen zu tun?dachschaden schrieb:
Deswegen verwende ich auch nur size_t.
Wenn man davon ausgehen kann, dass
int
ausreicht, dann nimmt manint
²
Und in deinem Programm reichtint
aus.
-
DirkB schrieb:
Dann ist das immer noch falsch. [...] %lu steht für
unsigned long
.Schau dir den letzten EDIT an.
-
size_t s; printf("%llu", (unsigned long long)s);
?
-
@SeppJ: Ist
long long
nicht wieder in C99 eingeführt worden?
-
dachschaden schrieb:
@SeppJ: Ist
long long
nicht wieder in C99 eingeführt worden?Dann nimmste eben unsigned long. Die Fälle, in denen selbst das nicht mehr funktioniert sind weitaus konstruierter als die Fälle, in denen deine jetzige Lösung nicht funktioniert.
-
Auf jeder Windows-Maschine kann dir das auf die Füße fallen. Weil
long
auf Windows 64-Bit 32 Bit groß ist, abersize_t
64 Bit. Und nicht nur beiprintf
, sondern auch beisprintf
,snprintf
... hat DirkB doch schon geschrieben. Wenn ich mir Objekten arbeite, die >4 GB groß sind, bekomme ich Müll.
So ein Problem hatte ich schon mal, und es überhaupt zu finden hat mich 10 Stunden meines Lebens gekostet. Da riskiere ich lieber eine Warnung vom Compiler und eine nachträgliche Korrektur der Definitionen.