Ho del codice C ++ che stampa un size_t
:
size_t a;
printf("%lu", a);
Mi piacerebbe che questo si compilasse senza avvisi su entrambe le architetture a 32 e 64 bit.
Se questo fosse C99, potrei usare printf("%z", a);
. Ma AFAICT %z
non esiste in nessun dialetto C ++ standard. Quindi, invece, devo fare
printf("%lu", (unsigned long) a);
che è davvero brutto.
Se non ci sono funzionalità per la stampa di size_t
s incorporate nel linguaggio, mi chiedo se sia possibile scrivere un wrapper printf o qualcosa di simile che inserirà i cast appropriati su size_t
s in modo da eliminare gli avvisi del compilatore spuri pur mantenendo quelli buoni.
Qualche idea?
Modifica Per chiarire perché sto usando printf: ho una base di codice relativamente grande che sto ripulendo. Usa i wrapper printf per fare cose come "scrivere un avviso, registrarlo in un file e possibilmente uscire dal codice con un errore". Potrei essere in grado di raccogliere abbastanza C ++ - pippo per farlo con un wrapper cout, ma preferirei non cambiare ogni chiamata warn () nel programma solo per eliminare alcuni avvertimenti del compilatore.
"%l"
? Non sarà sempre della taglia giusta? O la portabilità è importante?