C 11의 지정 초기화 목록 제외
C 11은 C99에 있는 기능인 지정 초기화 목록에 대한 지원이 부족합니다. 이러한 누락으로 인해 왜 이렇게 편리한 구문이 최신 표준에 포함되지 않았는지 궁금해하는 일부 개발자는 당황스러워했습니다.
이유
C 표준 위원회는 다음과 같은 제안을 지속적으로 거부해 왔습니다. 지정된 초기화 목록을 언어에 통합합니다. 그 근거는 몇 가지 고유한 문제에서 비롯됩니다.
평가 순서 불확정성:
C99에서 지정된 이니셜라이저 하위 표현식에 대한 평가 순서는 불확실하게 순서가 지정됩니다. 이로 인해 특히 초기화에 상호 작용 기능이나 부작용이 포함될 때 예상치 못한 동작이 발생할 수 있습니다.
호환성 위반:
C가 불확실한 평가로 지정된 초기화 목록을 구현하는 경우 일반적으로 일관된 평가를 제공하는 기존 C99 구현과의 호환성이 손상됩니다.
타당성 문제:
표준 위원회는 엄격한 초기화 목록 요구 사항을 충족하는 방식으로 지정 초기화 목록을 구현하는 타당성에 대해 반복적으로 의구심을 표명했습니다. C(11.6.4[dcl.init.list]4).
지정자 C 20의 제한 사항
지정된 이니셜라이저 목록은 C 11 및 C 17에서 제외되지만 C 20 표준은 결정성과 호환성을 보장하기 위해 제한 사항이 있는 부분 지원을 도입합니다. 이러한 제한 사항은 다음과 같습니다.
결론
C 11에서 지정된 이니셜라이저 목록을 제외하는 것은 평가 순서 불확정성에 대한 우려로 인해 표준 위원회가 의도적으로 결정한 것입니다. 호환성 문제 및 구현 문제. 제한된 지원이 결국 C 20에 추가되었지만 C 표준은 계속해서 엄격한 초기화 순서를 적용하고 프로그램 정확성이나 이식성을 손상시킬 수 있는 예측할 수 없는 동작을 피하는 데 중점을 두고 있습니다.
위 내용은 C 11에서 지정된 초기화 목록이 제외된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!