C 언어 기초
unsigned int i;
for (i = 3; i >= 0; i--)
printf("%u ", i);unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 동작으로 올바른 것은?
- A3 2 1 0을 표시하고 끝난다
- B3 2 1을 표시하고 끝난다
- C3 2 1 0을 표시한 후에도 끝나지 않고, 4294967295부터 값을 줄이면서 계속 표시한다
정답과 해설 보기
정답: C. 3 2 1 0을 표시한 후에도 끝나지 않고, 4294967295부터 값을 줄이면서 계속 표시한다
i는 부호 없는 형이므로 음수가 되는 일이 없고, 조건 i >= 0은 항상 참입니다. i가 0일 때 i--를 하면 2³² − 1 = 4294967295로 돌아가며, 루프는 끝나지 않고 4294967294, 4294967293으로 계속 표시합니다. 0까지 카운트다운하고 싶은 경우에는 int를 사용하거나, for (i = 4; i-- > 0; )처럼 작성 방식을 바꿉니다. gcc에서는 -Wextra를 붙이면 이 비교가 항상 참이라는 경고가 나옵니다.