Tengo un código C ++ que imprime un size_t
:
size_t a;
printf("%lu", a);
Me gustaría que esto se compilara sin advertencias en arquitecturas de 32 y 64 bits.
Si esto fuera C99, podría usar printf("%z", a);
. Pero AFAICT %z
no existe en ningún dialecto estándar de C ++. Entonces, en cambio, tengo que hacer
printf("%lu", (unsigned long) a);
que es realmente feo.
Si no hay ninguna facilidad para imprimir size_t
mensajes de correo electrónico integrados en el lenguaje, me pregunto si es posible escribir un contenedor printf o algo así que inserte las conversiones apropiadas en size_t
los mensajes de correo electrónico para eliminar las advertencias falsas del compilador mientras se mantienen las buenas.
¿Algunas ideas?
Editar Para aclarar por qué estoy usando printf: tengo una base de código relativamente grande que estoy limpiando. Usa envoltorios printf para hacer cosas como "escribir una advertencia, registrarla en un archivo y posiblemente salir del código con un error". Podría reunir suficiente C ++ - foo para hacer esto con un contenedor cout, pero prefiero no cambiar todas las llamadas warn () en el programa solo para deshacerme de algunas advertencias del compilador.
"%l"
? ¿No será siempre del tamaño correcto? ¿O importa la portabilidad?