ฉันมักจะเห็นซอร์สโค้ดโดยใช้ประเภทเช่น uint32, uint64 และฉันสงสัยว่าควรกำหนดโดยโปรแกรมเมอร์ในรหัสแอปพลิเคชันหรือหากกำหนดไว้ในส่วนหัว lib มาตรฐาน
อะไรคือวิธีที่ดีที่สุดในการมีประเภทเหล่านี้ในซอร์สโค้ดแอปพลิเคชันของฉัน
ฉันมักจะเห็นซอร์สโค้ดโดยใช้ประเภทเช่น uint32, uint64 และฉันสงสัยว่าควรกำหนดโดยโปรแกรมเมอร์ในรหัสแอปพลิเคชันหรือหากกำหนดไว้ในส่วนหัว lib มาตรฐาน
อะไรคือวิธีที่ดีที่สุดในการมีประเภทเหล่านี้ในซอร์สโค้ดแอปพลิเคชันของฉัน
คำตอบ:
C99 stdint.hกำหนดสิ่งเหล่านี้:
int8_tint16_tint32_tuint8_tuint16_tuint32_tและหากสถาปัตยกรรมรองรับ:
int64_tuint64_tมีตัวพิมพ์จำนวนเต็มอื่น ๆ ด้วยstdint.hเช่นกัน
หากคุณติดอยู่โดยไม่มีสภาพแวดล้อม C99 คุณควรจัดหา typedef ของคุณเองและใช้ C99 ต่อไป
uint32และuint64(เช่นโดยไม่ต้อง_tต่อท้าย) อาจจะเป็นเฉพาะของโปรแกรม
stdint.hต้องการพวกเขาทั้งหมด
typedef uint32_t Uint32;ในนามแฝงใน include / SDL_stdinc.h (ถ้าคุณเป็นผู้ใช้ SDL)
ประเภทจำนวนเต็มเหล่านี้ถูกกำหนดไว้ทั้งหมดใน stdint.h
stdint.hถ้าคุณเคารพมาตรฐาน C99
stdint.hของพวกเขาใน นี้จะส่งกลับ 0 grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_tยอดนิยม:
#include "stdint-gcc.h"และการ grepping ไฟล์นั้นให้คำจำกัดความ
_tคำต่อท้ายตามที่ระบุไว้ในคำตอบด้านบน
หากคุณใช้ C99 เพียงแค่ใส่stdint.h. BTW ประเภท 64 บิตอยู่ที่นั่นหากโปรเซสเซอร์รองรับ
uint128_tif __SIZEOF_INT128__กำหนดเป็น 16 หรือสูงกว่า (GCC และเข้ากันได้) มีอยู่ในเครื่อง x86_64 / amd64 แต่โปรเซสเซอร์ไม่รองรับโดยกำเนิด เฉพาะ Cray's เท่านั้นที่มีขนาดการลงทะเบียน IIRC
ผู้ถามถามจริงเกี่ยวกับ int16 (ฯลฯ ) มากกว่า (น่าเกลียด) int16_t (ฯลฯ )
ไม่มีส่วนหัวมาตรฐาน - หรือในโฟลเดอร์ / usr / include / ของ Linux ที่กำหนดโดยไม่มี "_t"
int_leastNN_tและuint_leastNN_tสำหรับNN8, 16, 32, และ 64 ต้องอยู่เสมอ C99 ไม่อนุญาตให้ใช้งานที่ไม่มีประเภทจำนวนเต็มอย่างน้อย 64 บิตเนื่องจากlong longจำเป็นต้องมีขนาดใหญ่เป็นอย่างน้อย