多次包含同一个头文件,实现只写一句宏定义就可以定义出两个不同类型的变量
来源:互联网 发布: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
- 多次包含同一个头文件,实现只写一句宏定义就可以定义出两个不同类型的变量
- C++头文件多次包含 变量,函数重定义解决方案
- C++ - 将模板的声明和定义放置在同一个头文件里
- C++ - 将模板的声明和定义放置在同一个头文件里
- C++将模板的声明和定义放置在同一个头文件里
- 同一变量被定义成不同类型时,系统的选择&冲突思想
- C++多个头文件重复定义变量问题
- 同一函数多次定义同名静态变量问题
- 多个头文件 定义 困惑
- [初级]避免多个头文件重复定义的问题
- 头文件的重复包含和变量的重复定义
- 防止头文件重复包含引起的变量重复定义
- 函数放在头文件中被多次包含的重定义问题
- c++ 多个头文件定义同一个namespace
- 防止变量重复定义、头文件重复包含、嵌套包含
- 防止变量重复定义、头文件重复包含、嵌套包含
- 防止变量重复定义;头文件重复包含、嵌套包含
- 防止变量重复定义、头文件重复包含、嵌套包含
- strong、weak等详解
- 光纤网卡和HBA卡的区别
- Java 按位操作运算符
- seq2seq模型理解
- SpringMVC总结
- 多次包含同一个头文件,实现只写一句宏定义就可以定义出两个不同类型的变量
- ubuntu安装jdk
- 【转】常用0x000000类型颜色代码表
- linux的tomcat配置
- 允许从Jenkins提供的其他文件(即外部文件中)加载图像,样式表,js等
- 基于android的声源定位模块系统设计
- 依赖了aar库的module被导入工程时出现failed to resolve的错误
- Oracle异常汇总
- Cordova 图片视频选择器,图片多选,模仿微信 Cordova ionic 图片视频选择器