如何实现只写一句宏定义就可以定义出两个不同类型的变量?
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_function int 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/77743036 obj-temp:=youli.o youli1.o youli:$(obj-temp) gcc $(obj-temp) -o youli clean: rm -f $(obj-temp) youli代码执行结果: