2011-11-08 39 views
78
static struct fuse_oprations hello_oper = { 
    .getattr = hello_getattr, 
    .readdir = hello_readdir, 
    .open = hello_open, 
    .read = hello_read, 
}; 

Tôi không hiểu rõ cú pháp C này. Tôi thậm chí không thể tìm kiếm vì tôi không biết tên của cú pháp. Cái gì thế?Dấu chấm (.) Có nghĩa là gì trong trình khởi tạo cấu trúc?

+0

Dường như trình khởi tạo cấu trúc. – Mysticial

+6

Được chuẩn hóa trong C99, vì vậy sẽ không hoạt động nếu bạn có trình biên dịch cũ (thực sự). –

+2

Cuối cùng tìm thấy liên kết cho điều này: http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – Mysticial

Trả lời

103

Đây là tính năng C99 cho phép bạn đặt các trường cụ thể của cấu trúc theo tên trong bộ khởi tạo. Trước đó, trình khởi tạo chỉ cần chứa các giá trị, cho tất cả các trường, theo thứ tự - vẫn hoạt động, tất nhiên.

Vì vậy, cho struct sau:

struct demo_s { 
    int  first; 
    int  second; 
    int  third; 
}; 

... bạn có thể sử dụng

struct demo_s demo = { 1, 2, 3 }; 

... hoặc:

struct demo_s demo = { .first = 1, .second = 2, .third = 3 }; 

... hay thậm chí là:

struct demo_s demo = { .first = 1, .third = 3, .second = 2 }; 

... mặc dù hai cái cuối cùng chỉ dành cho C99.

13

Được gọi là designated initialisation (xem Designated Initializers). An "initializer-list", Mỗi '.' là một "designator" mà trong trường hợp này tên một thành viên đặc biệt của 'fuse_oprations' struct để khởi tạo cho các đối tượng được chỉ định bởi của hello_oper 'nhận dạng.

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