C 언어 기초

int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);

&&와 ||의 오른쪽에 b++를 쓴 위의 코드를 실행했을 때의 출력으로 올바른 것은?

  1. A2 0
  2. B2 1
  3. C2 2
정답과 해설 보기

정답: A. 2 0

&&는 왼쪽이 거짓이면, ||는 왼쪽이 참이면 오른쪽을 평가하지 않습니다(단락 평가). 첫 번째 if에서는 a++의 값이 증가시키기 전의 0으로 거짓이므로 b++는 실행되지 않고, a만 1이 됩니다. 두 번째 if에서는 a++의 값이 1로 참이므로 역시 b++는 실행되지 않고, a가 2가 됩니다. 오른쪽에 ++나 함수 호출처럼 부작용이 있는 식을 쓰면, 실행되는지 여부가 왼쪽의 값에 따라 달라진다는 점에 주의합니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. break가 없는 case를 포함하는 위의 switch 문을 실행했을 때의 출력으로 올바른 것은?
  2. 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?
  3. 위의 함수 f를 3번 연속으로 호출했을 때, 세 번째 반환값으로 올바른 것은?
  4. C 언어에서 (1) 함수 안에서 static을 붙이지 않고 선언한 지역 변수, (2) malloc으로 확보한 영역, (3) 함수 밖에서 선언한 변수가 각각 존재하는 기간(수명)의 조합으로 올바른 것은?
  5. int는 32비트(최댓값 2147483647)로 한다. 위의 함수 fact(n)이 n의 계승을 오버플로 없이 올바르게 반환하는 최대의 n은?