Eu tenho algum código C ++ que imprime um size_t:
size_t a;
printf("%lu", a);
Eu gostaria que isso fosse compilado sem avisos nas arquiteturas de 32 e 64 bits.
Se fosse C99, eu poderia usar printf("%z", a);. Mas AFAICT %znão existe em nenhum dialeto C ++ padrão. Então, em vez disso, eu tenho que fazer
printf("%lu", (unsigned long) a);
o que é realmente feio.
Se não houver nenhum recurso para imprimir size_ts embutidos na linguagem, eu me pergunto se é possível escrever um wrapper printf ou algum tal que insira os casts apropriados nos size_ts de modo a eliminar avisos do compilador espúrios enquanto mantém os bons.
Alguma ideia?
Editar Para esclarecer por que estou usando printf: Tenho uma base de código relativamente grande que estou limpando. Ele usa printf wrappers para fazer coisas como "escrever um aviso, registrá-lo em um arquivo e, possivelmente, sair do código com um erro". Posso conseguir reunir C ++ - foo suficiente para fazer isso com um invólucro cout, mas prefiro não alterar todas as chamadas warn () no programa apenas para me livrar de alguns avisos do compilador.
"%l"? Não será sempre do tamanho certo? Ou a portabilidade é importante?