C 언어 기초
#define SQUARE(x) x * x
int a = 3;
printf("%d\n", SQUARE(a + 1));
#define으로 정의한 매크로 SQUARE를 사용하는 위의 코드를 실행했을 때의 출력으로 올바른 것은?
- A7
- B10
- C16
정답과 해설 보기
정답: A. 7
매크로는 전처리기가 문자의 나열을 그대로 치환할 뿐입니다. SQUARE(a + 1)은 a + 1 * a + 1로 전개되고, 곱셈이 먼저 계산되므로 3 + 3 + 1 = 7이 됩니다. 의도대로 (a + 1)의 제곱인 16으로 만들려면 #define SQUARE(x) ((x) * (x))처럼 인수와 전체를 괄호로 감쌉니다. 그래도 SQUARE(i++)처럼 부작용이 있는 인수에서는 i++가 두 번 평가되어 미정의 동작이 되므로, 인라인 함수를 사용하는 방법도 있습니다.
이어서 C 언어 기초 9문제 더 풀기