C 및 C에서 자동 구조 및 배열의 부분 초기화
오해는 자동 구조 및 배열의 부분 초기화가 잘못된 가정에서 비롯됩니다. C에서는 허용됩니다. 이러한 믿음과는 달리 표준에서는 완전 초기화 또는 초기화 없음이라는 두 가지 경우만 명시적으로 정의합니다.
부분 초기화
"부분 초기화"라는 용어는 표준에 정의되어 있지 않습니다. 구조체나 배열에 있는 멤버의 하위 집합만 초기화하는 것을 의미합니다.
완전 초기화
완전 초기화는 구조체나 배열의 모든 멤버가 명시적으로 초기화될 때 발생합니다. 예:
struct somestruct { int a; int b; int c; }; somestruct s = {1, 2, 3};
초기화 없음
초기화가 제공되지 않으면 동작은 변수의 저장 유형에 따라 달라집니다.
부분 초기화 실습
표준 동작이 아님에도 불구하고 자동 구조체 및 배열 멤버의 부분 초기화 Visual Studio 및 gcc/g 를 포함한 대부분의 컴파일러에서 지원됩니다.
C Standard(C99)
섹션 6.7.8.21 초기화
집합의 요소 또는 멤버 수보다 적은 수의 이니셜라이저가 제공되는 경우 나머지 요소는 0으로 초기화됩니다.
C 표준(C 03)
섹션 8.5.1 집계
초기화 프로그램이 더 적은 경우 , 초기화되지 않은 멤버는 값이 초기화됩니다. 값 초기화는 객체 유형에 따라 다릅니다. 예를 들어, 유니온이 아닌 클래스 유형의 비정적 데이터 멤버는 값으로 초기화되는 반면, 정수와 같은 기본 유형은 0으로 초기화됩니다.
결론
부분 자동 구조 및 배열의 초기화는 제대로 처리되지 않으면 정의되지 않은 결과를 초래할 수 있는 비표준 동작입니다. 이식성과 정확성을 보장하려면 항상 완전히 초기화하거나 초기화하지 않도록 하세요.
위 내용은 C 및 C에서 자동 구조 및 배열의 부분 초기화가 허용되고 정의됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!