thời gian gần đây tôi thấy GCC này vĩ mô:Làm thế nào để `({...})` trả về một giá trị?
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
Tôi đã không nhận ra trước khi tôi thấy mã này, rằng một khối mã {...}
bằng cách nào đó có thể trở lại giá trị trong C.
1) Ông có thể cho tôi một gợi ý làm thế nào điều này hoạt động?
Mặc dù, tôi thường đã có thể đạt được kết quả tương tự bằng cách lợi dụng các nhà điều hành dấu phẩy:
#define max(a,b) \
(typeof (a) _a = (a), \
typeof (b) _b = (b), \
(_a > _b ? _a : _b))
hoặc nếu nó chỉ cho tác dụng phụ tôi sẽ sử dụng do { ... } while(0)
2) gì là cách ưa thích để làm điều này?
có thể trở thành câu hỏi được bảo vệ! nhiều C (và C++, tôi tin) các lập trình viên không biết rằng '({...})' là một phần mở rộng GCC và không phải là một phần của ngôn ngữ C. IMHO. – Jack