Saya memiliki beberapa kode C ++ yang mencetak size_t
:
size_t a;
printf("%lu", a);
Saya ingin ini mengompilasi tanpa peringatan pada arsitektur 32 dan 64-bit.
Jika ini C99, saya bisa menggunakan printf("%z", a);
. Tetapi AFAICT %z
tidak ada dalam dialek C ++ standar. Jadi, saya harus melakukannya
printf("%lu", (unsigned long) a);
yang sangat jelek.
Jika tidak ada fasilitas untuk mencetak yang ada size_t
di dalam bahasa, saya bertanya-tanya apakah mungkin untuk menulis pembungkus printf atau semacamnya yang akan memasukkan cetakan yang sesuai size_t
untuk menghilangkan peringatan compiler palsu sambil tetap mempertahankan yang baik.
Ada ide?
Edit Untuk memperjelas mengapa saya menggunakan printf: Saya memiliki basis kode yang relatif besar yang saya bersihkan. Ini menggunakan pembungkus printf untuk melakukan hal-hal seperti "menulis peringatan, memasukkannya ke file, dan mungkin keluar dari kode dengan kesalahan". Saya mungkin dapat mengumpulkan cukup C ++ - foo untuk melakukan ini dengan pembungkus cout, tetapi saya lebih suka tidak mengubah setiap panggilan warn () dalam program hanya untuk menghilangkan beberapa peringatan kompiler.
"%l"
? Bukankah itu selalu dalam ukuran yang tepat? Atau apakah portabilitas itu penting?