Tôi có đoạn code:Tại sao chuyển đổi từ một size_t thành int không dấu cho tôi một cảnh báo?
unsigned int length = strlen(somestring);
Tôi đang biên soạn với mức độ cảnh báo vào ngày 4, và nó nói với tôi rằng "chuyển đổi từ size_t
để unsigned int
, có thể mất dữ liệu" khi một size_t
là một typedef
cho một unsigned int
.
Tại sao !?
Chỉnh sửa:
Tôi vừa giải quyết vấn đề của riêng mình. Tôi là người dùng XP và trình biên dịch của tôi đang kiểm tra khả năng tương thích 64 bit. Vì size_t
là nền tảng phụ thuộc, cho 64 bit, nó sẽ là một unsigned long long
, trong đó không giống như một unsigned int
.
Tất cả các kích thước đều phụ thuộc. 'size_t' không phải bằng bất kỳ kiểu nào khác, tất cả chúng có thể khác nhau. Bảo đảm duy nhất bạn có là 'sizeof (char) == 1', và số bit trong' char' (cũng phụ thuộc!) Được định nghĩa trong macro 'CHAR_BIT' trong tiêu đề' ', và 'sizeof (ngắn)> = sizeof (char)', 'sizeof (int)> = sizeof (dài)', và 'sizeof (long long)> = sizeof (long)'. –
GManNickG
@GMan: Thực ra tôi tin 'sizeof (long)> = sizeof (int)' :) +1 mặc dù –
@Billy: Oh dangit. Bây giờ đã quá muộn để sửa. -_- Ôi chà. : 3 – GManNickG