#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 I
使用宏定义方式进行非法指针判定-嵌入式C
最新推荐文章于 2022-08-11 21:51:10 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)