wow-check判断语句操作说明
wow-check文件说明项目地址https://github.com/wow-iot3/wow_linux_eval本文件的初衷是消除在语句执行过程中的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行。