미안하지만 난 무엇홀수 사용
... 핵심 오디오에서 책을 읽고 휴가 중이, 내 C 또는 저와 목표 C 책이 없습니다 이 변수 정의에서 중괄호는 무엇입니까? C99 표준에 따라 0
에 recorder
구조의 모든 멤버를 초기화
MyRecorder recorder = {0};
미안하지만 난 무엇홀수 사용
... 핵심 오디오에서 책을 읽고 휴가 중이, 내 C 또는 저와 목표 C 책이 없습니다 이 변수 정의에서 중괄호는 무엇입니까? C99 표준에 따라 0
에 recorder
구조의 모든 멤버를 초기화
MyRecorder recorder = {0};
, MyRecorder
가 struct
있음 (포인터 등을위한 정수의 0
, NULL
)이 sets every member to their respective representation of zero 가정.
int
는,
double
는, 포인터, 배열, 중첩 된 구조, ..., 모든 것을 당신이 상상할 수있는 등의 다른 모든 데이터 유형에서 작동
UPDATE를 : C99의 최종 초안을 인용 한 위의 링크 된 웹 사이트에서 추출한 인용 :
[6.7.8.21] 집합의 요소 또는 구성원이보다 중괄호로 둘러싸인 목록 적은 이니셜 라이저가있는 경우, [ ...] 나머지는 집합은 암시 적으로 에 정적 저장소 기간이있는 개체와 동일하게 초기화되어야합니다.
그것. 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
"레코더 구조의 모든 구성원을 0으로 초기화합니다." C99 표준을 적용합니다. "사실 0 비트로 구조의 모든 비트를 초기화합니다." C99 표준은 여러 번 지적한다. 사실이라고 말하는 것은 아니며, 표준을 따르는 컴파일러/타겟 아키텍처가 사실이 될 필요는 없다. –
@Complicatedseebio 감사합니다. 답변을 업데이트했습니다. –
도 스칼라 일 수 있습니다 :'MyRecorder recorder = {0};'MyRecorder'는'int'의 별칭입니다. 예를 들어 C에서 유효합니다 – ouah
@ouah'struct '의 이름으로 판단하면됩니다. 'int'또는 실제로 구조체/합집합 이외의 것임을 알 수 있습니다. – dasblinkenlight
MyRecorder
은 다음 중 하나가 될 수있는 당신은 사실, 최초의 단지 구조의 모든 요소를, initliaze하지 않는 제로
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
와 그 모든 요소를 초기화하려고합니다 하나. 그러나 다른 것들은 C 표준이 요구하는 것이기 때문에 자동으로 0으로 초기화됩니다.
넣을 경우 : MyRecorder 기록기 = {3};
*** 첫 번째 요소는 3되며 나머지는 내가`{0}`는 *** 보편적 제로 초기화를 호출처럼 0
수 웨일. 필요한 경우 모든 유형에 대해 반복적으로 "작동"합니다! ints, double, structs, 배열, 포인터, 구조체에 대한 포인터, 포인터 배열에 대한 구조체 ... – pmg
pmg : 답변으로 게시하십시오! –
@pmg - 답변으로 의견을 게시하지 않은 이유는 무엇입니까? – vikingosegundo