C 17에서 i = i 1의 합법성
C 17은 i = i 1이라는 표현을 합법화하는 미묘하지만 중요한 변화를 도입했습니다. , 이는 이전에 C 11에서 정의되지 않은 동작이었습니다.
C 17 이전
C 11에서는 할당 표현식의 평가 순서가 다음과 같이 지정되었습니다.
i = i 1;의 경우 이는 후위 연산자를 사용하여 i를 증가시키면 할당 전후에 부작용이 발생할 수 있음을 의미합니다. 이러한 시퀀싱 부족으로 인해 정의되지 않은 동작이 발생했습니다.
C 17의 변경 사항
C 17에서는 할당 연산자 사양에 추가 문장을 도입했습니다. "오른쪽 피연산자는 다음과 같습니다. 왼쪽 피연산자 앞에 시퀀스가 지정됩니다." 겉보기에 무해해 보이는 이 추가는 광범위한 의미를 갖습니다.
LHS 전에 RHS의 순서를 지정함으로써 C 17은 이제 RHS의 모든 부작용이 할당 자체 전에 발생하도록 보장합니다. 이는 잠재적인 정의되지 않은 동작으로부터 할당 작업을 효과적으로 분리합니다.
예제 재작성
이 변경 사항을 설명하기 위해 i = i 1;의 평가를 분석해 보겠습니다. C 17:
오른쪽 피연산자(RHS)의 값 계산: i 1
LHS 전 RHS 시퀀싱:
왼쪽 피연산자(LHS)의 값 계산: i
할당:
모든 부작용이 RHS가 할당보다 앞에 있으므로 C 17은 이러한 표현식에서 정의되지 않은 동작이 발생할 가능성을 확실히 제거합니다.
위 내용은 `i = i 1`은 C 17에서 법적으로 정의되어 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!