wow-check判断语句操作说明

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行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值