#define에 관한 이야기(#, ##, \)
매크로를 만들 때만 사용할 수 있는 지시어가 있는데, 바로 ##과 \이다.
##은 함수와 같은 매크로에서만 사용하는 것으로 두가지 인수를 연결시켜 버리는 기능을 한다.
예를 들어
#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을 붙여준다. [출처] #define에 관한 이야기(#, ##, )|작성자 봉이
#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) | 2009.03.30 |
---|---|
C언어 :: 동적할당 : malloc calloc realloc free (0) | 2009.03.29 |
C언어 :: 전처리문의 종류(#include, #define, #ifdef, ... ) (0) | 2009.03.28 |
[초강추!ㅋㅋ] 구조체 리턴에 관하여 (0) | 2009.03.26 |
malloc() 작동 원리 (0) | 2009.03.26 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |