- 論壇徽章:
- 0
|
無意中在wikipedia上看到的,覺得有些意思。所謂X-Macro,就是一個文件在同一個頭文件中被include多次(當然在不同的預處理環(huán)境下),以取得特定的效果,下面是一個例子:
File: commands.def
- COMMAND(ADD, "Addition command")
- COMMAND(SUB, "Subtraction command")
- COMMAND(XOR, "Exclusive-or command")
復制代碼
- enum command_indices {
- #define COMMAND(name, description) COMMAND_##name ,
- #include "commands.def"
- #undef COMMAND
- COMMAND_COUNT /* The number of existing commands */
- };
- char *command_descriptions[] = {
- #define COMMAND(name, description) description ,
- #include "commands.def"
- #undef COMMAND
- NULL
- };
- result_t handler_ADD (state_t *)
- {
- /* code for ADD here */
- }
- result_t handler_SUB (state_t *)
- {
- /* code for SUB here */
- }
- result_t handler_XOR (state_t *)
- {
- /* code for XOR here */
- }
- typedef result_t (*command_handler_t)(state_t *);
- command_handler_t command_handlers[] = {
- #define COMMAND(name, description) &handler_##name ,
- #include "commands.def"
- #undef COMMAND
- NULL
- };
復制代碼 |
|