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

chapter 19) #과 ##을 사용한 메크로 함수

by kiseno 2024. 10. 20.
728x90
반응형
SMALL
#include <stdio.h>
#define PRINT_EXPR(x) printf(#x " = %d\n", x)
#define NAME_CAT(x,y) (x ## y)

int main(void){
    int a1, a2;

    NAME_CAT(a, 1) = 10;
    NAME_CAT(a, 2) = 20;
    PRINT_EXPR(a1 + a2);
    PRINT_EXPR(a2 - a1);

    return 0;
}

### 코드의 주요 부분

- `#define PRINT_EXPR(x) printf(#x " = %d\n", x)`: 이 매크로는 인자로 받은 표현식 `x`를 문자열로 변환하고(`#x`), 그 표현식과 그 결과를 출력합니다.
- `#define NAME_CAT(x,y) (x ## y)`: 이 매크로는 두 인자 `x`와 `y`를 결합하여 하나의 토큰을 만듭니다. 예를 들어, `NAME_CAT(a, 1)`은 `a1`이 됩니다.

### 메인 함수의 작동

- `int a1, a2;`는 두 개의 정수 변수 `a1`과 `a2`를 선언합니다.
- `NAME_CAT(a, 1) = 10;`과 `NAME_CAT(a, 2) = 20;`은 `a1`과 `a2`에 각각 10과 20의 값을 할당합니다. 이는 `##` 연산자를 사용하여 변수 이름을 동적으로 생성합니다.
- `PRINT_EXPR(a1 + a2);`와 `PRINT_EXPR(a2 - a1);`는 각각 `a1 + a2`와 `a2 - a1` 표현식의 결과를 출력합니다. 첫 번째 PRINT_EXPR 매크로 호출은 "a1 + a2 = 30"을 출력하고, 두 번째 호출은 "a2 - a1 = 10"을 출력합니다.

### 출력 결과

```
a1 + a2 = 30
a2 - a1 = 10
```

728x90
반응형
LIST