문제

다음 코드가 UB를 호출합니까?

int main(){
  volatile int i = 0;
  volatile int* p = &i;
  int j = ++i * *p;
}
도움이 되었습니까?

해결책

그래 그거야 정의되지 않은 행동 두 번째 규칙을 위반하려고하기 때문에 ..

표준은 다음을 나타냅니다

1) 이전과 다음 시퀀스 지점 사이에서 객체는 표현의 평가에 의해 최대 한 번에 저장된 값을 수정해야한다.

2) 또한 저장할 값을 결정하기 위해서만 이전 값에 액세스해야합니다..

메모: 오페라의 평가 순서 * 운영자입니다 지정되지 않았습니다 그리고 *p 아무것도 아닙니다 i.

다른 팁

예 - ++ i 또는 *p (i)를 먼저 평가할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top