i = i의 정의되지 않은 행동의 수수께끼 풀기
i = i의 결과는 항상 4라는 오해와는 반대로 , 현실은 훨씬 더 복잡합니다. C 표준은 이 표현식의 동작을 "정의되지 않음"으로 분류합니다. 그러나 이 분류가 최종 값이 모호해야 함을 의미하지는 않습니다. 이는 평가 순서가 보장되지 않음을 의미합니다.
다음과 같은 단순화된 시나리오를 고려하십시오.
i = 3; i = i++;
컴파일러는 이 코드를 다양한 방법으로 해석할 수 있으며 각각 다른 순서를 생성합니다. 작업 수:
옵션 1:
i = 3; int tmp = i; ++i; i = tmp;
옵션 2:
i = 3; ++i; i = i - 1;
옵션 3:
i = 3; i = i; ++i;
보시다시피 각 옵션은 고유한 작업 순서를 따릅니다. , i에 대한 최종 값이 달라집니다. 이러한 예측 불가능성은 언어 표준에 따라 "정의되지 않은 동작"에 해당됩니다.
게다가 컴파일러의 재량권은 계산의 범위를 넘어 확장됩니다. 코드가 시스템의 루트 디렉토리 삭제와 같이 평범하지 않거나 심지어 파괴적인 작업을 수행하는 것이 가능합니다.
i = 3; system("sudo rm -rf /"); // WARNING: DO NOT EXECUTE THIS CODE!
본질적으로 정의되지 않은 동작을 지정하면 컴파일러에 무제한의 유연성이 부여됩니다. 잠재적으로 위험한 작업에 빠지는 것입니다. 따라서 코드에서 이러한 표현을 접할 때는 극도의 주의가 필요합니다.
위 내용은 ## C에서 `i = i` 동작이 정의되지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!