C의 지정 이니셜라이저: C 11에 없는 이유
C 11에서 지정 이니셜라이저의 생략은 많은 프로그래머에게 여전히 흥미로운 질문으로 남아 있습니다. . C99에서는 .age = 18과 같은 지정된 초기화 구문을 사용하여 구조체의 특정 멤버를 편리하게 초기화할 수 있습니다. 그러나 이 기능은 C 11에는 눈에 띄게 없습니다.
제외 근거
C 11 표준 위원회는 지정된 이니셜라이저에 대한 제안을 반복적으로 거부했습니다. 그 근거는 몇 가지 고유한 복잡성에서 비롯됩니다.
불확실한 실행 순서:
C99에는 지정된 초기화 표현식을 평가하기 위한 특정 규칙이 부족합니다. 평가가 발생하는 순서는 불확실하며 잠재적으로 프로그램 동작에 불일치가 발생할 수 있습니다. 대조적으로 C는 초기화 절 평가의 엄격한 순서를 시행합니다.
호환성 문제:
C에서 지정된 초기화를 구현하려면 기존 C99 구현과의 호환성을 깨야 합니다. 이로 인해 코드 마이그레이션 시 불일치 및 잠재적인 오류가 발생할 수 있습니다.
중첩 및 배열 제한:
C99에서는 지정된 초기화의 중첩과 배열의 지정된 초기화가 허용됩니다. 이러한 기능은 언어 일관성을 손상시키지 않고 C에 통합하기가 어려웠습니다.
C99 Standards Clash:
C99의 지정된 이니셜라이저는 모든 멤버를 지정하지 않고도 멤버 초기화를 허용합니다. 이는 구조체의 모든 멤버가 지정자를 사용하여 초기화되어야 하거나 전혀 초기화되지 않아야 한다는 C의 요구 사항과 대조됩니다.
C 20의 제한된 지원
업계 요구에 부응하여, C 위원회는 이후 C 20에서 지정된 이니셜라이저에 대한 제한된 지원을 도입했습니다. 그러나 이 구현은 위에서 언급한 문제를 해결하는 제한 사항을 부과합니다. 지정된 초기화는 엄격한 선언 순서로 사용해야 하며 중첩 및 배열 초기화는 지원되지 않으며 구조체 멤버 전체 또는 전혀 초기화되지 않아야 합니다.
대안
C99 스타일 지정 초기화 프로그램이 없음에도 불구하고 C는 클래스 초기화를 위한 대체 방법을 제공합니다. 멤버:
위 내용은 C 11에 지정된 초기화 프로그램이 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!