ฉันมีรหัส C ++ ที่พิมพ์size_t
:
size_t a;
printf("%lu", a);
ฉันต้องการให้สิ่งนี้รวบรวมโดยไม่มีคำเตือนทั้งในสถาปัตยกรรม 32- และ 64 บิต
ถ้าเป็น C99 ฉันสามารถprintf("%z", a);
ใช้ได้ แต่ AFAICT %z
ไม่มีอยู่ในภาษา C ++ มาตรฐานใด ๆ ดังนั้นฉันต้องทำแทน
printf("%lu", (unsigned long) a);
ซึ่งน่าเกลียดจริงๆ
หากไม่มีสิ่งอำนวยความสะดวกสำหรับการพิมพ์size_t
ในภาษาฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะเขียน printf wrapper หรือบางอย่างเช่นนั้นจะแทรก casts ที่เหมาะสมลงในsize_t
s เพื่อกำจัดคำเตือนของคอมไพเลอร์ปลอมในขณะที่ยังคงรักษาสิ่งที่ดีไว้
ความคิดใด ๆ ?
แก้ไขเพื่อชี้แจงว่าเหตุใดฉันจึงใช้ printf: ฉันมีฐานรหัสที่ค่อนข้างใหญ่ซึ่งฉันกำลังทำความสะอาด มันใช้ printf wrapper เพื่อทำสิ่งต่างๆเช่น "เขียนคำเตือนบันทึกลงในไฟล์และอาจออกจากโค้ดด้วยข้อผิดพลาด" ฉันอาจรวบรวม C ++ ได้เพียงพอ - foo ที่จะทำสิ่งนี้ด้วย Cout wrapper แต่ฉันไม่อยากเปลี่ยนคำเตือน () ทุกครั้งในโปรแกรมเพียงเพื่อกำจัดคำเตือนของคอมไพเลอร์