본문 바로가기
개념/혼자 공부하는 C언어

chapter 19) 메크로 함수를 사용한 프로그램

by kiseno 2024. 10. 21.
728x90
반응형
SMALL
#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`으로 언급)에 주의하세요.

728x90
반응형
LIST