多次包含同一个头文件,实现只写一句宏定义就可以定义出两个不同类型的变量

来源:互联网 发布:jq判断值是否在数组中 编辑:程序博客网 时间:2024/06/17 14:10

如何实现只写一句宏定义就可以定义出两个不同类型的变量?

youli.h

/*转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77743036第一次包含这个头文件会定义宏AUD_OP_1,并定义了一个枚举类型AUDIO_MAILBOX_MSG_TYPE第二次包含这个头文件会定义宏AUD_OP_2,并定义了一个函数指针数组aud_op_function*/#ifndef _AUD_OP_DEF_H_#define _AUD_OP_DEF_H_ #define AUD_OP_1#endif /*_AUD_OP_DEF_H_*/#ifdef AUD_OP_2#undef AUD_OP_2#undef AUD_OP_DESCR_BEG#undef AUD_OP_DESCR#undef AUD_OP_DESCR_END#define AUD_OP_DESCR_BEG()     OP_FUNC const aud_op_function[AUD_OP_MAX] = {#define AUD_OP_DESCR(id, func)      func,               #define AUD_OP_DESCR_END()     };#endif //AUD_OP_2#ifdef AUD_OP_1#undef AUD_OP_1#define AUD_OP_2#define AUD_OP_DESCR_BEG()     typedef enum {#define AUD_OP_DESCR(id, func)      id ,#define AUD_OP_DESCR_END()     AUD_OP_MAX }AUDIO_MAILBOX_MSG_TYPE;#endif //AUD_OP_1

 

youli2.h

/*转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77743036如何使用youli.h里的宏*/AUD_OP_DESCR_BEG()/***********************************************************************//*     Power Message Start                                            *//***********************************************************************/AUD_OP_DESCR( AUD_OP_PW_RADIO_ON,                      /*  0*/audio_power_radio_on)AUD_OP_DESCR( AUD_OP_PW_ON_TO_TEMP_ON,          /* 1 */audio_power_on_to_temp_on)AUD_OP_DESCR( AUD_OP_PW_RVC_OFF,                          /*  2*/audio_power_rvc_off)/***********************************************************************//*     ENG Message End                                               *//***********************************************************************/AUD_OP_DESCR_END()

 

youli3.h

 

/*转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77743036专门声明外部函数*/#ifndef _AUDIO_IF_H_#define _AUDIO_IF_H_ typedef void (*OP_FUNC) (void *);extern void audio_power_radio_on(void *ptr);extern void audio_power_on_to_temp_on(void *ptr);extern void audio_power_rvc_off(void *ptr);#endif

youli1.c

/*转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77743036这个源文件专门用来定义函数原型*/void audio_power_radio_on(void *ptr){printf("audio_power_radio_on\n");}void audio_power_on_to_temp_on(void *ptr){printf("audio_power_on_to_temp_on\n");}void audio_power_rvc_off(void *ptr){printf("audio_power_rvc_off\n");}

youli.c

 

//转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77743036#include <stdio.h>#include <stdlib.h>#include "youli3.h"   //外部定义的函数原型#include "youli.h"//第一次包含这个头文件会定义宏AUD_OP_1,并定义了一个枚举类型AUDIO_MAILBOX_MSG_TYPE#include "youli2.h"   //用youli.h头文件里的定义来定义枚举常量#include "youli.h"//第二次包含这个头文件会定义宏AUD_OP_2,并定义了一个函数指针数组aud_op_function#include "youli2.h" //用youli.h头文件里的定义来定义一个函数指针数组aud_op_functionint main(){aud_op_function[AUD_OP_PW_RADIO_ON](NULL);//调用函数aud_op_function[AUD_OP_PW_ON_TO_TEMP_ON](NULL);aud_op_function[AUD_OP_PW_RVC_OFF](NULL);return 1;}

makefile

//转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77743036obj-temp:=youli.o youli1.oyouli:$(obj-temp)gcc $(obj-temp) -o youliclean:rm -f $(obj-temp) youli

 代码执行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

阅读全文
0 0
原创粉丝点击