C에서 곱슬곱슬한 교정기의 이상한 사용
간단한 질문 죄송합니다만, 저는 코어 오디오에 관한 책을 읽으며 휴가 중이고, C나 Objective C 책은 가지고 있지 않습니다.
이 변수 정의에서 곱슬곱슬한 가새는 무엇을 합니까?
MyRecorder recorder = {0};
가정하에MyRecorder가struct, 이것은 모든 구성원이 각각의 0을 표현하도록 설정합니다. (0정수의 경우,NULL(Pointers 등).
사실 이것은 다음과 같은 다른 모든 데이터 유형에서도 작동합니다.int,double, 포인터, 배열, 중첩 구조, ..., 상상할 수 있는 모든 것(이를 지적해주신 pmg 감사합니다!)
업데이트: C99의 최종 초안을 인용하여 위 링크된 웹사이트에서 발췌한 인용문:
[6.7.8.21] 대괄호로 둘러싸인 목록에 있는 초기화자의 수가 집합체의 구성요소 또는 구성요소의 수보다 적을 경우, 집합체의 나머지 부분은 정적 저장 기간을 갖는 객체와 암묵적으로 동일하게 초기화되어야 합니다.
모든 멤버를 초기화하고 있습니다.recorder에의 구조.0C99 규격에 의거하여모든 구조를 초기화하는 것처럼 보일 수도 있습니다.0비트. 하지만 모든 컴파일러가 그렇지는 않습니다.
이 예제 코드를 참조하십시오.
#include<stdio.h>
struct s {
int i;
unsigned long l;
double d;
};
int main(){
struct s es = {0};
printf("%d\n", es.i);
printf("%lu\n", es.l);
printf("%f\n", es.d);
return 0;
}
이것이 출력입니다.
$ ./a.out
0
0
0.000000
구조의 초기화입니다.
사실, 그것은 구조의 모든 요소를 초기화하는 것이 아니라, 단지 첫번째 것입니다.그러나 나머지는 C 표준에서 요구하는 작업이기 때문에 자동으로 0으로 초기화됩니다.
다음을 입력하는 경우: MyRecorder recorder recorder = {3};
첫 번째 원소는 3이고 나머지 원소는 0입니다.
MyRecorder다음 중 하나일 수 있으며 0으로 모든 요소를 초기화하려고 합니다.
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
C++11과는 달리 C99에서는 이니셜라이저 가새에 적어도 하나의 요소가 있어야 합니다.
C++11 구조:
MyRecorder recorder{};
C 구조:
MyRecorder recorder = {0};
언급URL : https://stackoverflow.com/questions/8744967/odd-use-of-curly-braces-in-c
'programing' 카테고리의 다른 글
| 다른 함수에 void(*) 포인터 사용 (0) | 2023.11.06 |
|---|---|
| ANSI(C89/90) C에서 바이트를 나타내는 데 사용할 유형? (0) | 2023.11.06 |
| 안드로이드에서 타원 크기란 무엇을 의미합니까? (0) | 2023.11.06 |
| 저장 프로시저를 작성할 때 'definer'가 필요합니까? (0) | 2023.11.06 |
| 응답 J를 검색하는 방법jquery $.jax 객체의 SON 속성 (0) | 2023.11.01 |