C 언어 기초
int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);&&와 ||의 오른쪽에 b++를 쓴 위의 코드를 실행했을 때의 출력으로 올바른 것은?
- A2 0
- B2 1
- C2 2
정답과 해설 보기
정답: A. 2 0
&&는 왼쪽이 거짓이면, ||는 왼쪽이 참이면 오른쪽을 평가하지 않습니다(단락 평가). 첫 번째 if에서는 a++의 값이 증가시키기 전의 0으로 거짓이므로 b++는 실행되지 않고, a만 1이 됩니다. 두 번째 if에서는 a++의 값이 1로 참이므로 역시 b++는 실행되지 않고, a가 2가 됩니다. 오른쪽에 ++나 함수 호출처럼 부작용이 있는 식을 쓰면, 실행되는지 여부가 왼쪽의 값에 따라 달라진다는 점에 주의합니다.