static struct file_operations memory_fops = {
open: memory_open, /* just a selector for the real open */
};
이 uClinux는에 mem.c 파일입니다 및 후행을 ','의 사용을 설명해주십시오 ':'이 구조체 초기화 C 코드
GNU 스타일의 초기화 구문의static struct file_operations memory_fops = {
open: memory_open, /* just a selector for the real open */
};
이 uClinux는에 mem.c 파일입니다 및 후행을 ','의 사용을 설명해주십시오 ':'이 구조체 초기화 C 코드
GNU 스타일의 초기화 구문의; open
구성원은 memory_open
으로 초기화되고 나머지는 초기화되지 않은 상태로 유지됩니다. C99는 다른 구문 (.open = memory_open
)을 사용합니다.
오른쪽. GCC 문서에서는 1993 년에 발표 된 GCC 2.5 이후 구식 GNU 스타일 구문이 "쓸모가 없습니다"라고 말합니다. :-) – Ken
"초기화되지 않은 부분"은 확실합니까? 일반적으로 C 언어에서는 all-or-nothing입니다. 즉 적어도 * something *이 초기화되면 다른 모든 것은 * zero-initialized *입니다. 이것이 C99에서 새로운 구문으로 작동하는 방식입니다. 물론 GCC 관련 확장은 다르게 동작 할 수 있습니다. – AnT
확신 할 수는 없지만 이전 스타일의 초기화 프로그램에서 예전 스타일의 동작을 기대합니다. 전역 변수가 0으로 초기화되면 'auto' (스택) 변수는 그 메모리 공간을 사용하기 시작한 모든 쓰레기가됩니다. – geekosaur
C에서 선택적 후행 쉼표는 시간의 시작부터 중괄호로 묶은 이니셜 라이저에서 허용됩니다. 당신이 목록에서 초기화를 재 배열, 예를 들어,
struct SomeStructType s = {
value1,
value2,
value3,
};
이 그것을 쉽게처럼 초기화에 균일 쉼표 배치를 사용할 수 있도록이 같은 필요성이 발생한다. 당신이 그것을 사용하든 원치 않든간에 개인적 취향의 문제입니다.
:
구문의 경우 @geekosaur가 이미 설명한대로 GCC 관련 확장입니다. 해당 기능은 C99에서 다른 구문으로 표준화되었습니다.
그래서 당신을위한 시간의 시작은 C99입니까? 흥미로운 :) 나는 후행 쉼표 (이니셜 라이저와'enum ')가 추가되었다고 생각한다. –
@Jens Gustedt : 아니요. C99에서 후행 쉼표가 * enums *에 구체적으로 허용되었습니다. 그리고 추가 된 이유 중 하나는 열거 형과 중괄호로 묶인 이니셜 라이저간에 오래된 오래된 불일치를 제거하는 것이 었습니다. 후자의 경우 쉼표는 C89 이전에 불법 이었지만 열거 형에서는 위의 쉼표가 C89/90 이후로는 처음부터 시간의 시작부터 허용되었습니다. – AnT
. 나는 어딘가에 그것을 읽었다 고 확신하지만, 웹에서 검색하는 것은 나쁜 것을 가져 오지 않았다. –
코드 샘플에 적절한 형식을 지정하면 훨씬 쉽게 사용할 수 있습니다. 최고, – diatrevolo