Theo PC-lint, báo cáo kết quả sau đây sẽ không bao giờ có TRUE
:Câu lệnh C/C++ if() này có được đánh giá là TRUE không?
if((variable & 0x02) == 1)
Tôi đang sử dụng một trình biên dịch C cho các hệ thống nhúng có đánh giá nó để TRUE
bất cứ khi nào các bit tương ứng trong variable
được thiết lập. Tôi đoán trình biên dịch đang thực hiện so sánh TRUE
/FALSE
của cả hai bên của ==
thay vì so sánh các số kết quả. Nói cách khác, mỗi khi biểu thức (varable & 0x02)
không phải là số không (ví dụ: TRUE
), thì tuyên bố cũng sẽ là TRUE
, vì giá trị 1 is also TRUE
(không phải bằng không).
Tôi không biết liệu các tiêu chuẩn C/C++
có xác định rõ cách trình biên dịch hoạt động trong trường hợp này hay không. Có bất kỳ chuyên gia C/C++
nào ở đó có thể trả lời câu hỏi này dựa trên những tiêu chuẩn (ví dụ: C90, C99,
, v.v.) không?
P.S .: Trong tuyên bố ở trên, "biến" là một ký tự chưa được ký.
'loại variable' là gì? –
Bạn có thể đặt tên cho trình biên dịch này không? Một người bạn của tôi tạo ra một bộ sưu tập các lỗi trình biên dịch lẻ. – blaze
Có thể mã thực của bạn có ký hiệu kép (ví dụ: "var && 0x02") không? Điều đó sẽ giải thích trình biên dịch đánh giá nó là đúng. – tinman