Nó chỉ là gián tiếp một vấn đề.
Những điều xấu có thể xảy ra nếu bạn sử dụng số nguyên đã ký cho các hoạt động bitwise như &
, |
, <<
và >>
.
điều xấu hoàn toàn khác nhau có thể xảy ra nếu bạn sử dụng số nguyên unsigned cho số học (underflow, vòng lặp vô hạn khi kiểm tra nếu một số là >= 0
vv)
Bởi vì điều này, một số trình biên dịch và các công cụ kiểm tra tĩnh sẽ phát đi cảnh báo khi bạn kết hợp các số nguyên đã ký và chưa ký trong một trong hai loại thao tác (thao tác số học hoặc bit).
Mặc dù nó có thể an toàn để trộn chúng trong các trường hợp đơn giản như ví dụ của bạn, nếu bạn làm điều đó có nghĩa là bạn không thể sử dụng các công cụ kiểm tra tĩnh đó (hoặc phải vô hiệu hóa các cảnh báo đó có thể có nghĩa là các lỗi khác không bị phát hiện.
Đôi khi bạn không có lựa chọn, ví dụ: khi thực hiện số học về các giá trị loại size_t
trong mã quản lý bộ nhớ.
Trong ví dụ của bạn, tôi sẽ dính vào int
, chỉ vì đơn giản hơn để có ít loại hơn và int
sẽ ở trong đó vì đó là loại đối số đầu tiên là main()
.
Không hoàn toàn là lừa đảo, nhưng đáng đọc: http://stackoverflow.com/questions/859943/c-how-can-i-fix-warnings-like-comparison-between-signed-and-unsigned – finnw