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 %z
nã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_t
s embutidos na linguagem, eu me pergunto se é possível escrever um wrapper printf ou algum tal que insira os casts apropriados nos size_t
s 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?