使用宏定义方式进行非法指针判定-嵌入式C
来源:互联网 发布:库卡krc 5.6编程软件 编辑:程序博客网 时间:2024/05/16 05:29
#include <stdio.h>#include <stdlib.h>// test parameters for level 2nd#define AUDIO_DEVICE_ID (0x9527)#define AUDIO_NAME_MAX (20)typedef struct { int id; char name[AUDIO_NAME_MAX+1];} audio_t, *audio_handle_t;// level 1st#define is_invalid_ptr(_ptr) (_ptr == NULL)// level 2nd#define is_invalid_handle(_handle) ((_handle == NULL) || ((_handle)->id != AUDIO_DEVICE_ID))int main(){ void* lptr = NULL; audio_t audio; audio_handle_t p_audio = &audio; // level 1st if (is_invalid_ptr(lptr)) { printf("this ptr is invalid.\r\n"); } // level 2nd // use case 1: if (is_invalid_handle(p_audio)) { printf("this handle != NULL, but lost right Id.\r\n"); } // use case 2: p_audio->id = AUDIO_DEVICE_ID; if (!is_invalid_handle(p_audio)) { printf("this handle != NULL, and own right Id.\r\n"); } // use case 3: p_audio = NULL; if (is_invalid_handle(p_audio)) { printf("this handle == NULL.\r\n"); } return 0;}/*运行结果如下:this ptr is invalid.this handle != NULL, but lost right Id.this handle != NULL, and own right Id.this handle == NULL.Process returned 0 (0x0) execution time : 0.188 sPress any key to continue.*//* 注释: *环境:code::block, gcc, gdb; *讨论:使用宏定义进行错误判定; *意义:1.使代码更清晰明了,少一行代码,会不会更环保?被陈皓的coolshell洗脑了; 2.在项目过程中,经常需要对指针进行判断,比如有如下两个设备类型需要注册typedef struct { int id; char name[NAME_MAX];}device_t, device_handle_t;static device_t audio_device;static device_t key_device;在我的初级阶段使用中,可能需要做如下判定:int foo(type arg, type *_p_arg) { device_handle_t p_audio = &audio_device; device_handle_t p_key = &key_device; if(NULL != p_audio || AUDIO_DEVICE_ID != (p_audio->id)) { return ERROR_T(AUDIO_DEVICE); } ...... if(NULL != p_key || KEY_DEVICE_ID != (p_key->id)) { return ERROR_T(KEY_DEVICE); } ......}如果使用宏,代码组织如下:int foo(type arg, type *_p_arg) { device_handle_t p_audio = &audio_device; device_handle_t p_key = &key_device; if(is_invalid_handle(p_aduio)) { return ERROR_T(AUDIO_DEVICE); } ...... if(is_invalid_handle(p_key)) { return ERROR_T(KEY_DEVICE); } ......}*//* end of this file */
0 0
- 使用宏定义方式进行非法指针判定-嵌入式C
- 嵌入式 linux下date命令详解以及如何在Makefile中定义宏并在c中进行使用来定义软件版本号
- C语言指针定义变量方式
- C语言指针定义变量方式
- C/C++,指针的定义和使用
- 嵌入式系统使用宏定义
- 初学C语言:使用指针变量的方式进行三个整数的排序
- c指针的定义与使用总结
- C指针的非法与合法应用
- 函数指针定义方式
- 常用的C变量的定义方式:指针有关
- 函数指针数组和C变量的定义方式
- c语言—指针基础(4:字符串常见定义方式)
- 使用宏定义进行拼接
- 嵌入式 简单的宏在编译的时候进行定义
- 使用PHP对非法内容进行检查
- 使用Filter进行 过滤非法登录用户
- 使用PHP对非法内容进行检查
- ubuntu 14.04 安装jdk+eclipse+android sdk +adt
- 第10周项目4-大奖赛计分
- VC数字图像处理编程之一
- spring过滤器总结
- MAC使用QT的framework库
- 使用宏定义方式进行非法指针判定-嵌入式C
- Arcgis的坐标转换
- ef 自动生成的语句 自动加判断是否 null
- Gson解析Json的方法 泛型解决方案
- 7种分页模板分享
- Servlet 客户端 HTTP 请求
- 第[3天]程序的控制结构——循环嵌套例题04(九九乘法表)
- Mysql数据优化需知
- SQL to MongoDB: An Updated Mapping