tôi đã nhận thấy rằng đôi khi, C macro được viết như một cái gì đó như thế này:Thông tin thêm về `({});` trong C?
#define foo(bar) ({ ++bar; })
Sau một số thử nghiệm, tôi đã phát hiện ra rằng:
({});
sẽ biên dịch, nhưng không làm gì cả. (Như mong đợi.)- Rời khỏi
;
tắt sẽ gây ra lỗi cú pháp. Một tác dụng phụ của điều này là đảm bảo rằng foo() trông giống như một hàm trong mã của bạn. (Mặc dù, nếu bạn để dấu chấm phẩy tắt, lỗi không phải là rất hữu ích để chẩn đoán vấn đề!) return ({});
than phiền về giá trị khoảng trống không bị bỏ qua, giống như tôi đã cố gắng sử dụng hàm void.
Đây có phải chỉ là để làm cho nhà phát triển thêm dấu chấm phẩy vào macro của họ hay nó có mục đích khác? Tôi đã thử Google, nhưng nó thất bại thảm hại với dấu chấm câu. có phải có một cái tên cho thứ này?
Cũ - nhưng cú pháp vẫn được hỗ trợ trong 4.4.2. –