如何实现只写一句宏定义就可以定义出两个不同类型的变量?
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
代码执行结果: