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

xiaoxiao2021-02-28  141

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

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

 代码执行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-25068.html

最新回复(0)