C 11에서 지정 이니셜라이저의 부재 지정
프로그래밍 영역에서 지정 이니셜라이저는 C99 표준에서 두각을 나타냈습니다. 이러한 초기화 프로그램을 통해 개발자는 구조체 멤버에 선택적으로 값을 할당하여 코드 가독성과 간결성을 향상할 수 있었습니다. 그러나 C 11 표준에서는 이러한 이니셜라이저가 눈에 띄게 누락되어 이러한 누락의 근거에 대한 문의가 촉발되었습니다.
C 11 표준 위원회는 지정된 이니셜라이저를 포함하는 것에 대해 반복적으로 심의해 왔습니다. 특징. 그러나 합의는 여전히 그러한 제안을 강력히 거부하는 것입니다. 위원회는 지정된 이니셜라이저를 구현하려는 노력이 역사적으로 극복할 수 없는 문제에 직면했다고 믿습니다.
C99의 다음 코드 조각을 고려하세요.
struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; }
이 코드는 Person의 age 멤버에 값을 할당합니다. 다른 멤버는 초기화되지 않은 상태로 유지하면서 구조체를 만듭니다. C99는 이러한 선택적 초기화를 허용하지만 C 11은 그렇지 않습니다.
C 11에서 지정된 이니셜라이저를 제외하는 주요 이유 중 하나는 C99의 이니셜라이저 평가 순서를 예측할 수 없기 때문입니다. 표준에서는 이 순서를 "불확실한 순서"로 모호하게 설명하므로 예상치 못한 프로그램 동작이 발생할 여지가 있습니다. 예를 들어, Person 구조체의 초기화에 부작용이 있는 함수 호출이 포함된 경우 실행 순서가 의도하지 않은 결과를 초래할 수 있으며 컴파일러가 반드시 플래그를 지정하지는 않습니다.
반면 C에는 초기화에 대한 엄격한 요구 사항이 있습니다. 목록 평가를 통해 초기화 프로그램이 나타나는 순서대로 실행되는지 확인합니다. 이러한 명령을 시행하려면 이전 C99 디자인과의 호환성을 깨야 했으며 위원회는 이를 수용할 수 없다고 판단했습니다.
C 11에 지정된 이니셜라이저가 없다는 사실이 처음에는 비판을 받았을 수도 있지만 C에 포함하는 데 부과된 제한 사항 20개는 불확실한 행동에 대한 우려를 해결했습니다. C 20의 표준화된 평가 순서는 개발자에게 초기화 프로세스에 대한 더 큰 확실성과 제어권을 제공합니다.
위 내용은 C 11 지정 초기화 프로그램이 존재하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!