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

이 C 구문을 잘 이해하지 못합니다. 구문 이름을 모르므로 검색 할 수도 없습니다. 그게 뭐야?도트 (.)는 구조체 초기화 프로그램에서 무엇을 의미합니까?

+0

구조체 초기화 프로그램처럼 보입니다. – Mysticial

+6

C99에서 표준화되었으므로 (실제로) 오래된 컴파일러가 있으면 작동하지 않을 것입니다. –

+2

마지막으로 다음 링크를 찾았습니다. http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – Mysticial

답변

103

이것은 초기화 프로그램에서 이름별로 구조체의 특정 필드를 설정할 수있는 C99 기능입니다. 그 전에 이니셜 라이저는 모든 필드에 대해 순서대로 값을 포함 할 필요가있었습니다. 물론 여전히 작동합니다. 심지어

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

... 나 : 당신이

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

... 또는 사용할 수 있습니다

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

... 다음 구조체에 대한 그래서

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

... 마지막 두 개는 C99 전용입니다.

13

designated initialisation (Designated Initializers 참조)으로 알려져 있습니다. 에 "초기화리스트"는 각각 ". '는 이때 이름에 "fuse_oprations "구조체의 특정 부재 'hello_oper '식별자에 의해 지정된 개체에 대해 초기화하는 "designator "이다.

관련 문제