September 27, 2008

C Pre-Processors

일단, 잘 알려진 아래의 Pre-Processors를 나열해 보면 아래와 같다.

#include, #define, #undef

#ifdef, #ifndef, #if, #else, #elif, #endif

아래의 두 Pre-Processors는 설명이 좀 필요하다.

1. #
Stringization으로 불린다. 먼, 사용하는 예를 보면 아래와 같다.

source
#define PRINT_DEFINITION(a, b) printf(#a " is " #b ".\n");

PRINT_DEFINITION(Love, Everything);
result
Love is Everything.
이처럼, #은 Pre-Processor에 인자로 들어온 값을 constant string으로 만들어주는 역할을 한다.

2. ##
이 Pre-Processor는 {Token Pasting | Token Concatenation | Token Merge | Merge} Operator등 다양하게 불리우는 것 같다. 어떤 이름이 정식 이름인지는 잘 모르겠다. 일단 사용 예부터 보자.

source
#define FUNC_SIZE(a) sizeof(func##a)

struct func1 {
int a;
int b;
char *c;
};

struct func2 {
char *a;
int b;
};

printf("func1 size: %d, func2 size: %d\n", FUNC_SIZE(1), FUNC_SIZE(2));

result
func1 size: 12, func2 size: 8

짧고 좋은 예가 생각이 안나서 예제가 조금 유치하다. 예에서 볼 수 있듯이, token merge operator는 Pre-Processor에서 두 글자를 하나의 인자로 이어주는 역할을 한다.

No comments:

Post a Comment