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}