Trong khi đọc http://en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effects, tôi đi qua ví dụ này:C khối trở thành biểu: ({int a = 1; int b = 2; a + b;}) bằng 3
\#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK?
nào bạn có thể sử dụng chính xác như một hàm, tức là max(1,2)
là một biểu thức đánh giá thành 2.
CÂU HỎI CỦA TÔI là, Làm cách nào để đánh giá giá trị của biểu thức cuối cùng? Cụ thể, cây phân tích cú pháp của cấu trúc này trông như thế nào? Tôi nghĩ rằng { }
luôn có nghĩa là một câu lệnh ghép và các câu lệnh không có giá trị. Tôi đã thử đào bới trong ngữ pháp C và vẫn không thể tìm ra vấn đề này.
'42;' cũng là một tuyên bố :-) – paxdiablo
Ah, nhưng tôi nghi ngờ OP biết rằng '42;' là một câu lệnh vì nó là một câu lệnh trong tiêu chuẩn C. Biểu thức câu lệnh là Tuy nhiên, không phải trong Standard C. –