- 论坛徽章:
- 0
|
无意中在wikipedia上看到的,觉得有些意思。所谓X-Macro,就是一个文件在同一个头文件中被include多次(当然在不同的预处理环境下),以取得特定的效果,下面是一个例子:
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
- };
复制代码 |
|