Trong số những điều sau đây, đó là cách ưa thích để làm việc, và tại sao? Có bất kỳ tình huống cụ thể nào trong đó nó tạo ra bất kỳ sự khác biệt nào, giả sử rằng thanh hàm() không lấy giá trị bằng không tại bất kỳ thời điểm nào?Cách thích hợp nhất để gán và kiểm tra biến trong câu lệnh if là gì?
Trường hợp 1: Kiểm tra các giá trị chân lý của cả hai điều kiện
if ((foo = bar()) && foo < 0)
error();
Trường hợp 2: Kiểm tra chỉ biến
if ((foo = bar()) < 0)
error();
Đối với những người tìm thấy điều này và đang sử dụng Perl, thành ngữ là 'foo = bar() hoặc error();'. Điều này cũng có thể được thực hiện trong C, nhưng nó không phải là thực tế phổ biến và có thể gây nhầm lẫn: '(foo = bar()) || error(); '- Nhiệm vụ của Perl có ưu tiên cao hơn' || ', nhưng trong C nó là ngược lại. –
@PhilH Nó thường được coi là phong cách xấu để bao gồm các tác dụng phụ có điều kiện như toán hạng bên phải của một hoạt động boolean (MISRA-C 12.4). Và mã của bạn sẽ chỉ hoạt động nếu error() trả về một cái gì đó. Vì vậy, đừng cố gắng trong C. – Lundin
Điểm tốt về yêu cầu trả lại; Tôi cho rằng trong Perl không có kiểm tra và lỗi như vậy() sẽ luôn luôn chạy. –