int i=1,j;
j= ++i + ++i;
printf("%d",j);
I는 C 번호 동일한 로직을 사용할 때,이 프로그램의 출력이 C.But에 6
이다 출력 5
이다.C#과 C에서`j = ++ i ++ i;;의 출력이 다른 이유는 무엇입니까?
나는 같은 논리는 C#에서 규칙은 "엄격 바로 왼쪽 각 표현식을 평가"두 개의 다른 언어
int i=1,j;
j= ++i + ++i;
printf("%d",j);
I는 C 번호 동일한 로직을 사용할 때,이 프로그램의 출력이 C.But에 6
이다 출력 5
이다.C#과 C에서`j = ++ i ++ i;;의 출력이 다른 이유는 무엇입니까?
나는 같은 논리는 C#에서 규칙은 "엄격 바로 왼쪽 각 표현식을 평가"두 개의 다른 언어
에서 다르게 작동하는 이유를 알고 싶어요. 따라서
j= ++i + ++i ;
잘 C#을에 정의 하지만 두 sequence points 사이에 한 번 이상 변수 자세한 내용을 수정할 수 없기 때문에 같은 표현은 C에 undefined behavior를 호출합니다.
:표준은 이전 및 다음 시퀀스 지점 사이
이 객체의 저장 값이 표현의 평가에 의해에서 가장 번 수정 한 것이다 상태. 또한, 종래의 값이 저장되는 값을 결정하는 경우에만 액세스한다)
더 설명 Eric Lippert하여 문서를 읽는다. Precedence vs Associativity vs Order.
정의되지 않은 동작의 의미는 5입니다. 따라서 출력은 동일합니다. (C에서 _sequence_point_없이'i'를 두 번 변경할 수 없습니다.) – mafso
출력은 * C 컴파일러에서 6 개입니다. 정의되지 않은 동작이므로 다른 답변을 사용할 수 있습니다. – JeremyP
아마 "같은 논리"가 아니기 때문일 수 있습니다. – rightfold