ฉันมีตัวแปรของชนิดและฉันต้องการที่จะพิมพ์โดยใช้size_t printf()ฉันใช้ตัวระบุรูปแบบใดเพื่อพิมพ์แบบพกพา
ในเครื่อง 32- บิต%uดูเหมือนว่าถูกต้อง ฉันรวบรวมg++ -g -W -Wall -Werror -ansi -pedanticและไม่มีคำเตือน แต่เมื่อฉันรวบรวมรหัสนั้นในเครื่อง 64 บิตมันจะสร้างคำเตือน
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
%luคำเตือนออกไปตามที่คาดไว้ถ้าเปลี่ยนที่
คำถามคือฉันจะเขียนรหัสได้อย่างไรเพื่อรวบรวมคำเตือนฟรีทั้งบนเครื่อง 32- และ 64- บิต?
แก้ไข: ในฐานะที่เป็นวิธีแก้ปัญหาผมคิดว่าหนึ่งคำตอบที่อาจจะมีการ "โยน" ตัวแปรลงในจำนวนเต็มที่เป็นพอใหญ่พูดและพิมพ์โดยใช้unsigned long %luที่จะทำงานในทั้งสองกรณี ฉันกำลังมองหาว่ามีความคิดอื่น ๆ
unsigned longเป็นตัวเลือกที่ดีที่สุดหากการใช้งาน libc ของคุณไม่สนับสนุนzตัวปรับ มาตรฐาน C99size_tไม่แนะนำให้มีการแปลงเป็นจำนวนเต็มมากกว่าlongดังนั้นคุณจึงปลอดภัยพอสมควร