수업에서 산술식의 피연산자 우선순위에 따른 부작용 설명하면서 이런 코드를 예시로 들었거든
int a=5;
int fun1(){
a=17;
return 3;
}
void main(){
a=a+fun1();
}
a=a+fun1(); 여기서 a가 먼저 평가되면 결과 a는 8이 되고 fun1()이 먼저 평가되면 결과 a는 20이 되는거잖아.
만약 a=(a)+fun1(); 이런 식으로 썼으면 강제로 a가 먼저 평가되도록 할 수 있는건가? 누가 교수님한테 이렇게 물어봤는데 교수님은 괄호 안에서 아무런 연산이 일어나지 않으니까 컴파일러가 무시하고 넘어갈 수 있을거 같다고, 확신은 못하겠다고 하셨는데 님들 생각은 어떰?
?
정답은 코드를 이렇게 적으면 안된다였습니다.
https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
정의되지 않은거라 무슨일이 일어날지는 모르고 애초에 이렇게 써서는 안된다는거지...? - dc App
권장되진 않는건 맞지만, 에러는 아니니 쓸 수는 있지. 다만 컴파일러마다 구현이 다를 수 있고 그 컴파일러도 버전이 올라가면 다르게 동작할 수 있다는건 감안해야 한다는거
ㅇㅎ ㄱㅅㄱㅅ - dc App
아닌가? 이 경우는 UB 아니라 앞쪽이 먼저 실행되는게 스펙일거같긴하다.
잘 몰겠네 ㅋㅋ 난 이만..
구름 ide로 해봤는데 그냥 무시하고 20 출력하더라 - dc App
그거 질문한새끼 지가 똑똑하다고 생각하면서 물어봤을텐데 진짜 개좆병신새끼ㅋㅋ
억까는 님같음
https://ideone.com/DejnZw
이거는 안에 b=a 이렇게 넣어서 된거 같구 그냥 (a)만 했을때는 무시하더라 - dc App