매크로를 만들 때만 사용할 수 있는 지시어가 있는데, 바로 ##과 \이다.
##은 함수와 같은 매크로에서만 사용하는 것으로 두가지 인수를 연결시켜 버리는 기능을 한다.
예를 들어
#define MACRO(a, b) a##b
이렇게 매크로를 만들었다고 하자. 프로그램에서 이 매크로를
a = MACRO(First, Last);
이렇게 사용했다면 실제로는 두 인수 First와 Last가 연결되어
a = FirstLast;
이렇게 되는 것이다.
\는 매크로의 내용이 너무 길 때 여러줄에 쓰기 위해 필요한 것이다. 줄 맨 끝에 \를 붙여 주면 그 아래 줄에 계속 연결하여 쓸 수 있게 된다.
예를 들어
#define MACRO(a, b, c) a = b + c; printf("%d\n", a); a = b - c; printf("%d\n", a)
이런 매크로가 있다고 하자. 이건 \를 서서 다음과 같이 쓰면 보기도 쉽고 만들기도 쉽다.
#define MACRO(a, b, c) a = b + c; \
printf("%d\n", a); \
a = b - c; \
printf("%d\n", a)
첫 번째, #x
#define Test(x) printf(#x " = %d\n", x);
#x는 문자열이다.
Text(x)에서 넘어온 x값을 문자열로 바꿔준다.
예)
#include <stdio.h>
#define Test(x) printf(#x " = %d\n", x);
void main()
{
int num = 10;
Test(num - 5);
}
결과: num - 5 = 5
참고: printf("", "") 사용 가능하다. ,는 있어도 되고 없어도 된다.
두 번째, ##x
#define Test(number) printf("%c\n", ch[1##number])
##x는 앞문자에 넘어온 number을 붙여준다.
#include <stdio.h>
#include <string.h>
#define Test(number) printf("%c\n", ch[1##number])
void main()
{
char ch[30] = "T_T My mistake sorry sorry" ;
Test(5);
}
결과: ch[15]의 내용인 s
[프로그래밍/C] 구조체 리턴에 관하여 (0) | 2017.02.12 |
---|---|
[프로그래밍/C] 전처리문의 종류(#include, #define, #ifdef, ... ) (0) | 2017.02.10 |
[프로그래밍/C] 동적할당 : malloc calloc realloc free (0) | 2017.02.09 |
[프로그래밍/C] 달력 알고리즘 (윤년계산) (0) | 2017.02.02 |
[프로그래밍/C] 날짜/시간 구하기 (0) | 2017.01.30 |