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 %zno 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_tmensajes 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_tlos 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?