I have some C++ code that prints a size_t
:
size_t a;
printf("%lu", a);
I'd like this to compile without warnings on both 32- and 64-bit architectures.
If this were C99, I could use printf("%z", a);
. But AFAICT %z
doesn't exist in any standard C++ dialect. So instead, I have to do
printf("%lu", (unsigned long) a);
which is really ugly.
If there's no facility for printing size_t
s built into the language, I wonder if it's possible to write a printf wrapper or somesuch such that will insert the appropriate casts on size_t
s so as to eliminate spurious compiler warnings while still maintaining the good ones.
Any ideas?
Edit To clarify why I'm using printf: I have a relatively large code base that I'm cleaning up. It uses printf wrappers to do things like "write a warning, log it to a file, and possibly exit the code with an error". I might be able to muster up enough C++-foo to do this with a cout wrapper, but I'd rather not change every warn() call in the program just to get rid of some compiler warnings.