Ich habe einen C ++ - Code, der Folgendes druckt size_t
:
size_t a;
printf("%lu", a);
Ich möchte, dass dies ohne Warnungen auf 32- und 64-Bit-Architekturen kompiliert wird.
Wenn dies C99 wäre, könnte ich verwenden printf("%z", a);
. AFAICT %z
existiert jedoch in keinem Standard-C ++ - Dialekt. Also muss ich stattdessen tun
printf("%lu", (unsigned long) a);
Das ist wirklich hässlich.
Wenn es keine Möglichkeit gibt, size_t
s in die Sprache zu drucken , frage ich mich, ob es möglich ist, einen printf-Wrapper oder einen solchen zu schreiben, der die entsprechenden Casts auf size_t
s einfügt , um falsche Compiler-Warnungen zu beseitigen und gleichzeitig die guten beizubehalten.
Irgendwelche Ideen?
Bearbeiten Um zu verdeutlichen, warum ich printf verwende: Ich habe eine relativ große Codebasis, die ich bereinige. Es verwendet printf-Wrapper, um beispielsweise eine Warnung zu schreiben, sie in einer Datei zu protokollieren und den Code möglicherweise mit einem Fehler zu beenden. Möglicherweise kann ich genug C ++ - foo aufbringen, um dies mit einem Cout-Wrapper zu tun, aber ich möchte lieber nicht jeden warn () -Aufruf im Programm ändern, nur um einige Compiler-Warnungen zu entfernen.
"%l"
? Wird das nicht immer die richtige Größe sein? Oder spielt Portabilität eine Rolle?