Sự cố quan trọng
Trình biên dịch C2H luôn đánh giá cả hai phần của logic
(&&
, ||
) và có điều kiện (?:
)
Vận hành. Điều này khác với tiêu chuẩn quốc gia Hoa Kỳ mong đợi
Hành vi Của Viện (ANSI) C, trong đó các thuật toán giao tiếp được đánh giá từ trái sang phải,
và các nhà hoạt động nghệ thuật không cần thiết sẽ bị bỏ qua.
Ví dụ, trong biểu thức (i-- && j--)
,
nếu giá trị là i
không, ANSI C không đánh giá
biểu thức phía bên phải (RHS) và không j
giảm. Ngược lại, Trình biên dịch C2H đánh giá cả hai bên,
giảm giá j
.
Các biểu thức sau đây là các ví dụ khác có thể là bị ảnh hưởng bởi vấn đề này:
if (i-- || j )
...;
a = ((cond == 1)? i : j );
Sử dụng các hoạt động logic và có điều kiện mà các toán tử có
không có tác dụng phụ. Các hoạt động với các tác dụng phụ bao gồm trước và sau
các phép toán gia tăng và giảm dần (
, --
),
hoạt động bộ nhớ (*
, []
, ., ->
),
và các cuộc gọi chức năng.