Không, tiêu chuẩn C xác định kích thước tối thiểu đối với loại không thể thiếu nhưng không đảm bảo về kích thước tối đa.
Việc triển khai sẽ cung cấp các loại intN_t
nếu các loại kích thước đó có sẵn. Tôi chỉ đề cập rằng vì bạn có một thẻ đa nền tảng - việc triển khai không có loại chiều rộng bit chính xác không cần phải cung cấp các loại đó.
Bạn thường có thể chọn (với cài đặt xác định bằng, ví dụ: cc -D_INT16_IS_INT
và #ifdef
s) loại chính xác để sử dụng cho kích thước bit cụ thể. Bạn có thể tìm ra các định nghĩa bắt buộc cho từng nền tảng bạn muốn hỗ trợ bằng mã C bằng cách sử dụng CHAR_BIT
và sizeof()
.
Các phần có liên quan của dự thảo c1x (n1362) là:
loại nguyên
7.18.1.1 Exact-width
Tên typedef intN_t
chỉ định một loại nguyên ký kết với chiều rộng N
, không có bit đệm và biểu diễn bổ sung của hai. Do đó, int8_t
biểu thị loại số nguyên đã ký với chiều rộng chính xác 8 bit.
Tên typedef uintN_t
chỉ định loại số nguyên không dấu có chiều rộng N
. Do đó, uint24_t
biểu thị một loại số nguyên không dấu có chiều rộng chính xác là 24 bit.
Các loại này là tùy chọn. Tuy nhiên, nếu triển khai cung cấp các kiểu số nguyên với chiều rộng là 8, 16, 32 hoặc 64 bit, không có bit đệm và (đối với các loại đã ký) có biểu diễn bổ sung của hai, nó sẽ xác định tên typedef tương ứng.
Về việc lựa chọn các loại, một cái gì đó như thế này là đủ:
#ifdef INT32_IS_SHORT
typedef short INT32
#endif
#ifdef INT32_IS_INT
typedef int INT32
#endif
#ifdef INT32_IS_LONG
typedef long INT32
#endif
Câu hỏi của bạn rất giống với http://stackoverflow.com/questions/126279/c99-stdint-h-header-and-ms-visual-studio –
@zilgo: Câu trả lời có thể tương tự; câu hỏi là không. Trong 126279, OP đã nhận thức được stdint.h; NawaMan (rõ ràng) không phải là khi đặt câu hỏi. –
Lưu ý rằng giả định cuối cùng của bạn là sai. Sự khác biệt về kích thước của một int không nhất thiết phải chặn biên dịch trên các kiến trúc khác, nhưng các giả định tiềm ẩn như 'i == i & 0xFFFFFFFF' có thể. Một lập trình viên giỏi viết '& 0xFFFF' khi anh ta muốn toán học modulo 2^16, và không quan tâm liệu 'unsigned short' có chính xác 16 bit hay không. – MSalters