2011-11-15 34 views
6

Trong Linux, container_of vĩ mô được kèm theo trong ngoặc đơn dường như "thêm":Tại sao chúng ta cần dấu ngoặc đơn xung quanh macro khối?

#define container_of(ptr, type, member) ({ \ 
       const typeof(((type *)0)->member) *__mptr = (ptr); 
       (type *)((char *)__mptr - offsetof(type,member));}) 

Thay vì điều đó, chúng ta có thể chỉ cần sử dụng

#define container_of(ptr, type, member) { \ 
       const typeof(((type *)0)->member) *__mptr = (ptr); 
       (type *)((char *)__mptr - offsetof(type,member));} 

?

Các dấu ngoặc đơn có bắt buộc hay chỉ là để đề phòng?

+0

này phải được ghi thẻ GCC chứ không phải C ....... –

Trả lời

9

({...}) là một nhóm được nhóm, một khối mã có thể được sử dụng bên trong một biểu thức. Câu lệnh cuối cùng xác định giá trị của nó.

Macro bên trong bạn sử dụng để cho phép macro hoạt động giống như chức năng. Chủ yếu là chức năng static inline sẽ thích hợp hơn.

câu hỏi liên quan:

+1

Cảm ơn bạn rất nhiều! – SHH

Các vấn đề liên quan