>  기사  >  백엔드 개발  >  \"i = i 1\"이 C 17에서는 합법적이지만 C 11에서는 정의되지 않은 동작인 이유는 무엇입니까?

\"i = i 1\"이 C 17에서는 합법적이지만 C 11에서는 정의되지 않은 동작인 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-27 09:53:30262검색

Why is

C 17에서 i = i 1을 허용하도록 만들기

C 11에서 "i = i 1"이라는 표현은 다음과 같은 이유로 정의되지 않은 동작입니다. 시퀀싱 보장이 충분하지 않습니다. 그러나 C 17에서는 이 표현이 합법적입니다. 그 이유는 다음과 같습니다.

C 11

C 11에서 할당 연산자(=)에 대한 순서 규칙은 할당이 오른쪽 값 계산 이후에 순서대로 지정되었다고 명시했습니다. 그리고 왼쪽 피연산자. 그러나 오른쪽 피연산자의 할당 및 부작용의 상대적 순서에 대한 특정 규칙은 존재하지 않았습니다. 이러한 순서 지정 부족으로 인해 "i = i 1"과 같은 경우 정의되지 않은 동작이 발생했으며, 여기서 부작용(i 증가)과 할당이 잠재적으로 순서가 지정되지 않았습니다.

C 17

C 17에서는 할당 연산자에 대한 새로운 순서 규칙을 도입합니다. "오른쪽 피연산자는 왼쪽 피연산자보다 먼저 순서가 지정됩니다." 이는 할당 자체를 포함하여 왼쪽 피연산자에서 어떤 작업이 발생하기 전에 오른쪽 피연산자 내의 모든 부작용과 값 계산이 완전히 순서화됨을 의미합니다.

"i = i 1"에 미치는 영향

C 17의 새로운 순서 규칙을 사용하면 i 증가(후위 연산자에 의해 수행됨)의 부작용이 이제 할당 전에 발생하도록 보장되므로 "i = i 1"이라는 표현이 허용됩니다. 따라서 "i 1"의 값을 i에 할당하는 행위는 부작용으로부터 완전히 격리되어 C 11에 존재했던 정의되지 않은 동작을 제거합니다.

요약하면 할당에 대한 시퀀싱 규칙의 변경 C 17의 연산자는 "i = i 1"의 평가가 특정 순서를 따르도록 보장하여 i 증가의 부작용이 할당 자체보다 앞에 나타나도록 하여 C 11에 존재했던 정의되지 않은 동작을 해결합니다.

위 내용은 \"i = i 1\"이 C 17에서는 합법적이지만 C 11에서는 정의되지 않은 동작인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.