>  기사  >  백엔드 개발  >  cout에 사후 증분 연산자가 사용된 C 프로그램의 출력이 정의되지 않은 이유는 무엇입니까?

cout에 사후 증분 연산자가 사용된 C 프로그램의 출력이 정의되지 않은 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-06 08:23:02243검색

Why is the output of a C   program with post-increment operators used in cout undefined?

C에서 사후 증가의 정의되지 않은 동작

C에서 사후 증가 연산자(i )는 변수의 값을 다음과 같이 증가시킵니다. 1 평가 후. cout에서 삽입 연산자(<<)와 함께 사용하면 작업 순서가 중요해집니다.

프로그램 1

다음 코드 조각을 고려하세요.

<code class="cpp">#include <iostream>
using namespace std;

main(){
    int i = 5;
    cout << i++ << i-- << ++i << --i << i << endl;
}</p>
<p>이 프로그램의 출력은 정의되지 않았습니다. C 표준에 따르면, 스칼라 객체(예: i)에 대한 부작용이 다른 부작용이나 동일한 객체를 사용한 값 계산에 비해 순서가 없는 경우 동작은 정의되지 않습니다.</p>
<p><strong>설명: </strong></p>
<p>cout << 나는 << 나-- <<   나는 << --i << i는 다음 작업 순서와 동일합니다.</p>
<ol>
<li>i : i를 6으로 증가시키고 5를 반환합니다.</li>
<li>i--: i를 5로 감소시킵니다.</li>
<li> i: i를 6으로 증가시킵니다.</li>
<li>--i: i를 5로 감소시킵니다.</li>
<li>i: 5를 반환합니다.</li>
</ol>
<p>그러나 표준은 이러한 부작용이 발생하는 순서입니다. 이는 컴파일러가 이를 어떤 순서로든 실행할 수 있다는 것을 의미하며, 잠재적으로 프로그램이 실행될 때마다 다른 출력이 나올 수 있습니다. 이 특정한 경우에는 위에 나열된 순서대로 부작용이 실행되므로 출력은 "55555"입니다.</p>
<p><strong>프로그램 2</strong></p>
<p>다음 프로그램도 정의되지 않은 동작을 보여줍니다. :</p>
<pre class="brush:php;toolbar:false"><code class="cpp">int x = 20, y = 35;
x = y++ + y + x++ + y++;
cout << x << endl << y;</code>

이 프로그램의 예상 출력은 126과 37입니다. 그러나 정의되지 않은 동작으로 인해 실제 출력은 컴파일러 구현에 따라 달라질 수 있습니다.

도덕 이야기:

cout이나 증분의 부작용에 의존하는 다른 작업과 함께 사후 증분을 사용하지 않는 것이 중요합니다. 대신 예측 가능한 동작을 보장하려면 변수 수정 및 인쇄에 별도의 줄을 사용하십시오.

위 내용은 cout에 사후 증분 연산자가 사용된 C 프로그램의 출력이 정의되지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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