C 언어의 X 매크로
enum ErrorCode
{
ERROR_0,
ERROR_1,
ERROR_2,
ERROR_3
};
const char* get_error_info(enum ErrorCode error_code)
{
switch(error_code)
{
case ERROR_0:
return "error info 0";
case ERROR_1:
return "error info 1";
case ERROR_2:
return "error info 2";
case ERROR_3:
return "error info 3";
}
return "";
}
또 다른 방법은 다음과 같다.
enum
{
ERROR_0,
ERROR_1,
ERROR_2,
ERROR_3
};
const char* error_info[] =
{
"error info 0",
"error info 1",
"error info 2",
"error info 3"
};
하지만 이런 식으로 ERROR가 추가되면4 후엔 error에서info에 응답 내용을 추가하면 그룹 하위 표시가 경계를 넘어갑니다!
그래서 누군가가 X매크로를 만들었는데 이것은 C 언어 자체의 예처리 메커니즘을 이용했다
test.h
#ifndef _TEST_H_
#define _TEST_H_
#define NUMBER X(One,"One") X(Two,"Two") X(Three,"Three")
#define X(a,b) a,
enum Number { NUMBER };
#undef X
extern const char *NumberStrings[];
#endif // _TEST_H_
test.c
#include "test.h"
#define X(a, b) b,
const char *NumberStrings[] = {NUMBER};
#undef X
위 방법을 사용하면 헤더 파일에서 NUMBER 매크로의 매거진과 관련 내용의 정의를 확장할 수 있습니다.
이 기교는 매거와 문자열의 관련에 국한되지 않고 매거와 어떤 유형의 관련 내용에도 국한될 수 있다.
참조 자료:http://weibo.com/p/1001603878433896971283