C 언어 기초

#define DEBUG 0
#ifdef DEBUG
    printf("A\n");
#endif
#if DEBUG
    printf("B\n");
#endif

위의 코드를 main 함수 안에 써서 실행했을 때의 출력으로 올바른 것은?

  1. AA만 표시된다
  2. B아무것도 표시되지 않는다
  3. CA와 B가 표시된다
정답과 해설 보기

정답: A. A만 표시된다

#ifdef DEBUG는 DEBUG라는 매크로가 정의되어 있는지만 조사하며, 값은 보지 않습니다. DEBUG는 값 0으로 정의되어 있으므로 조건은 참이 되고, A를 표시하는 문이 컴파일됩니다. #if DEBUG는 값을 조사하며, 0이므로 거짓이 되어 B를 표시하는 문은 제거됩니다. 디버그용 처리를 전환할 때는 #ifdef와 #if 중 어느 쪽으로 판정할지를 통일해 두지 않으면 이러한 불일치가 일어납니다.

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

C 언어 기초의 다른 문제

  1. 마이컴의 출력 레지스터를 위와 같이 선언하여 사용하고 있다. 이 선언에 대한 설명으로 올바른 것은?
  2. C 언어 규격에서 말하는 미정의 동작의 설명으로 올바른 것은?
  3. int와 unsigned int는 32비트로 한다. 다음 중 C 언어 규격에서 미정의 동작이 되는 것은?
  4. 위의 함수를 gcc로 최적화를 켜고 컴파일하면 if (p == NULL)의 판정이 삭제되는 경우가 있다. 그 이유로 올바른 것은?
  5. C 언어 규격에서 int형의 크기에 대해 정해져 있는 것으로 올바른 것은?