2016-08-24 2 views
0

이 프로그램의 출력은 4.00000입니다. 나는 c와 2의 첫 번째 곱셈이 일어날 것이며 그 다음에 증가가 일어나거나 증가 된 c와 2의 곱셈이 발생한다는 것을 모른다.증분 또는 증분 전의 곱셈 이후에 첫 번째 곱셈은 어떻게됩니까?

+1

먼저 일어날 일 (항상 이런 경우)은 정의되지 않은 동작입니다. – Haris

+0

다음을 읽어보십시오 : http://stackoverflow.com/questions/7506704/difference-between-sequence-points-and-operator-precedence-0-o ... 핵심 비트 : "운영자 우선 순위 때문에 중요하지 않습니다. 두 연산자가 평가되는 순서는 잘 정의되어 있습니다. 부작용이 처리되는 순서가 아직 정의되지 않았기 때문입니다. " – Woodstock

+1

또한'% f'는 부동 소수점 숫자를 나타 내기 때문에 int를 출력하므로'% d'을 사용하십시오 – Caw

답변

0

이렇게하면 정의되지 않은 동작이 호출되어 프로그램에서 어떤 일이 발생할 수 있습니다.

동작은 다음과 같은 경우에 정의되지 않는다 : ...]

  • 둘 사이 시퀀스 포인트

    구체적 J.2 정의되지 않은 동작을 C99 사양보기 , 객체가 두 번 이상 수정되거나 수정되어 이전 값이 저장 될 값을 결정하는 것 이외의 다른 값으로 읽혀지는 경우 (6.5)

  • "두 지점 간의 서열"경험칙으로서

성명 최종 두 세미콜론 (;) 사이를 의미한다. 발췌에서 언급 한 "객체"는 변수 c입니다.

그런 점에서 우리는 오브젝트가 두 시퀀스 포인트 사이에서 두 번 수정되었음을 분명히 알 수 있습니다. 수식 c++의 평가 중 한 번 수정되고 할당 중에 한 번 수정됩니다.