본문 바로가기

컴퓨터/언어,프로그래밍

C언어 :: #define에 관한 이야기(#, ##, \)

#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을 붙여준다.

#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


제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...

태그