1
#define与#undef
1#include
2#include
3
4#define HELLO_BUG 100
5
6int main(int argc, char *argv[]) {
7
8 printf("hello bug %d\r\n",HELLO_BUG);
9
10#undef HELLO_BUG
11
12 printf("hello bug %d\r\n",HELLO_BUG);
13 return 0;
14}
如上代码所示,便会编译报错,提示第二条打印语句HELLO_BUG宏未定义。
2
X-MACRO
1#define X_MACRO(a, b) a
2//do something
3#undef X_MACRO
4
5#define X_MACRO(a, b) b
6//do something
7#undef X_MACRO
1/*************消息定义**********/
2#define MSG_TABLE \
3 X_MACROS(USER_MSG1, MsgProc1) \
4 X_MACROS(USER_MSG2, MsgProc2) \
5 X_MACROS(USER_MSG3, MsgProc3) \
6
7/*************消息枚举定义**********/
8typedef enum {
9 #define X_MACROS(a, b) a,
10 MSG_TABLE
11 #undef X_MACROS
12 MSG_MAX
13} MSG_TYPE;
14
15/*************消息处理定义**********/
16const Proc Proc_table[] = {
17 #define X_MACROS(a, b) b,
18 MSG_TABLE
19 #undef X_MACROS
20};
21
22/*************实际使用**********/
23void sMessageProc(MSG_TYPE msgtype)
24{
25 (Proc_table[msgtype])();
26}