>백엔드 개발 >C++ >제4판 \'C 프로그래밍 언어\' 코드는 잘 정의된 동작을 나타냅니까?

제4판 \'C 프로그래밍 언어\' 코드는 잘 정의된 동작을 나타냅니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-23 22:14:29256검색

Does Fourth Edition

"The C 프로그래밍 언어" 4판의 코드에 잘 정의된 동작이 있습니까?

문제의 코드는 그럼에도 불구하고 지정되지 않은 동작을 나타냅니다. 정의되지 않은 동작을 호출하지 않습니다. 이는 특히 s.replace() 호출과 관련하여 하위 표현식의 평가 순서가 지정되지 않았기 때문입니다.

지정되지 않은 하위 표현식 평가의 원리

함수 인수에는 지정되지 않은 평가 순서가 있습니다. 즉, 개별 함수 인수의 평가 순서를 가정할 수 없습니다. 이 경우 s.find()에 대한 인수는 s.replace() 이전이나 이후에 평가된다는 보장이 없습니다.

평가 순서 영향

에 따라 평가 순서에 따라 s.find()의 결과는 s.replace()의 부작용으로 인해 변경될 수 있습니다. 이는 s.replace()가 문자열 길이를 수정하여 후속 s.find() 호출 결과에 영향을 미치기 때문입니다.

실제 평가 차이

테스트가 제공되면 clang은 s.replace(0, 4, "")보다 먼저 s.find("even")를 평가하는 반면 gcc는 잠재적으로 반대 순서로 평가합니다. 이러한 순서 차이는 연결된 함수 호출에서 다른 결과로 이어집니다.

C 17 변경 사항

C 17에서 후위 표현식(예: 체인 호출)에 대한 평가 순서는 다음과 같습니다. 강화되었습니다. 함수 인수의 매개변수 초기화(부작용 포함)가 이제 다른 매개변수에 대해 불확정적으로 순서화됩니다. 이렇게 하면 문제의 코드와 같은 코드가 잘 지정된 동작을 하게 됩니다.

위 내용은 제4판 \'C 프로그래밍 언어\' 코드는 잘 정의된 동작을 나타냅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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