wow-check文件说明
- 项目地址:https://gitee.com/wow-iot/wow-iot7
- 本文件的初衷是消除在语句执行过程中的if的判断跳转语句,让代码看着更更简洁。
1)其内容包含:是否有打印信息、是否存储为log日志、是否设置错误码等。
2)而判断语句的执行包含continue、break、goto、return等跳转操作。
下面给出打印信息部分实例,其它具体实现可直接参考wow_check.h实现;
check语句宏定义
#define CHECK_RET_GOTO_P(x,out,args...) \
do { \
if (!(x)) { \
printf("assertion failed %s: %d:", __FILE__, __LINE__);\
printf(args); \
goto out; \
} \
} while(0);
#define CHECK_RET_VAL_P(x,v,args...) \
do { \
if (!(x)) { \
printf("assertion %s: %d:", __FILE__, __LINE__); \
printf(args); \
return v; \
} \
} while(0);
原语句实现方式:
int goto_func_demo(void){
char* data1 = NULL;
char* data2 = NULL;
char* data3 = NULL;
char* data4 = NULL;
data1 = malloc(1024);
if(data1 == NULL){
printf("malloc 1024 Byte failed!\n");
return -1;
}
data2 = malloc(1024);
if(data2 == NULL){
printf("malloc 1024 Byte failed!\n");
free(data1);
return -1;
}
data3 = malloc(1024);
if(data3== NULL){
printf("malloc 1024 Byte failed!\n");
free(data2);
free(data1);
return -1;
}
data4 = malloc(1024);
if(data4 == NULL){
printf("malloc 1024 Byte failed!\n");
free(data3);
free(data2);
free(data1);
return -1;
}
return 0;
}
使用check语句实现方式:
int goto_func_demo(void){
char* data1 = NULL;
char* data2 = NULL;
char* data3 = NULL;
char* data4 = NULL;
data1 = malloc(1024);
CHECK_RET_VAL_P(data1,-1,"malloc 1024 Byte failed!\n");
data2 = malloc(1024);
CHECK_RET_GOTO_P(data2,out1,"malloc 1024 Byte failed!\n");
data3 = malloc(1024);
CHECK_RET_GOTO_P(data3,out2,"malloc 1024 Byte failed!\n");
data4 = malloc(1024);
CHECK_RET_GOTO_P(data4,out3,"malloc 1024 Byte failed!\n");
return 0;
out3:
free(data3);
out2:
free(data2);
out1:
free(data1);
return -1;
}
使用后代码明显简介,而代码函数块行数由原来的36行调整到24行。