#include <stdio.h>
#define SUM(a,b) ((a) + (b))
#define MUL(a,b) ((a) + (b))
int main(void){
int a = 10, b = 20, x = 30, y = 40, res;
printf("a + b = %d\n", SUM(a, b));
printf("x + y = %d\n", MUL(a, b));
res = 30 / MUL(2, 5);
printf("res : %d\n", res);
return 0;
}
### 코드의 주요 부분
- `#define SUM(a,b) ((a) + (b))`: 두 수 `a`와 `b`의 합을 계산하는 매크로입니다.
- `#define MUL(a,b) ((a) + (b))`: 두 수 `a`와 `b`의 곱을 계산해야 하지만, 실수로 합을 계산하도록 정의되어 있습니다.
- `printf("a + b = %d\n", SUM(a, b));`: `a`와 `b`의 합을 계산하여 출력합니다. 예상대로 `30`이 출력됩니다.
- `printf("x + y = %d\n", MUL(a, b));`: `a`와 `b`의 "곱"을 계산하여 출력해야 하지만, 실제로는 `a`와 `b`의 합을 계산하여 출력합니다. 올바르게 정의되었다면 `200`이 출력되어야 하지만, `MUL` 매크로의 오류로 인해 `30`이 출력됩니다.
- `res = 30 / MUL(2, 5);`: `2`와 `5`의 곱을 계산한 후, `30`을 그 결과로 나누어야 하지만, 실제로는 `2`와 `5`의 합으로 나눕니다. 즉, `30 / 7`을 계산하여 `res`에 저장하고, 이 결과 `4`가 출력됩니다.
### 수정사항
`MUL` 매크로가 두 수의 곱을 계산하도록 올바르게 정의해야 합니다.
```c
#define MUL(a,b) ((a) * (b))
```
이렇게 수정한 후의 코드는 다음과 같은 출력을 생성합니다:
```
a + b = 30
x + y = 200
res : 6
```
여기서 `res`의 계산은 `30 / (2 * 5)` 즉, `30 / 10`을 의미하며, 결과적으로 `3`이 됩니다. 따라서 수정된 설명에 따르면 올바른 `res`의 출력은 `3`이어야 합니다. 수정사항 설명 중 `res`에 대한 잘못된 계산 (`6`으로 언급)에 주의하세요.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 19) 사용자 정의 헤더 파일을 사용하는 프로그램 (0) | 2024.10.22 |
---|---|
chapter 19) #과 ##을 사용한 메크로 함수 (0) | 2024.10.20 |
chapter 19) 다양한 메크로명 사용 (0) | 2024.10.19 |
chapter 19) #pragma 지시자 (0) | 2024.10.18 |
chapter 19) #if, #ifdef, #else , #endif 를 사용한 조건부 컴파일 (2) | 2024.10.17 |