C/C++利用位运算来进行函数参数检查
来源:互联网 发布:脂肪肝 知乎 编辑:程序博客网 时间:2024/06/01 09:57
经常我们写一个函数时,假如它有多个参数,我们在函数入口处,对这多个参数的有效性进行检查,经常使用的写法会像下面一样
#include "stdafx.h"#include <iostream>void testFunction(int *pTest, int test, bool isTest){ if((pTest == NULL) || (test < 0) || (isTest == false)){printf("invalid argument\n");return; } return;}int _tmain(int argc, _TCHAR* argv[]){ testFunction(NULL, 10, true); return 0;}
当然,这样的写法你会在PC上,或是能够进行单步调试的时候,设置断点,能够很清楚的知道哪个参数无效,但是我们再嵌入式开发的时候,在真机上调试,常常只能用printf语句打印来进行调试,遇到这种写法,你只知道参数有误,却不知道是哪个参数出了问题。然后又来加打印,去查看值看哪个参数出了问题。。。。。。
或者,你可以直接写成下面这样的写法:
void testFunction(int *pTest, int test, bool isTest){if(pTest == NULL){printf("invalid argument of pTest\n");return;}if(test < 0){printf("invalid argument of test\n");return;}if(isTest == false){printf("invalid argument of isTest\n");return;}return;}这样的写法参数一多久显得不是很优雅了,这几天不经意想到了用位运算的方式来表示出错的参数索引,可以用下面的方式:
#include "stdafx.h"#include <iostream>#define ARGCHECK(CONDITION, FLAG) ((FLAG <<= 1) && (CONDITION))void testFunction(int *pTest, int test, bool isTest){ int flag = 1; if(ARGCHECK(pTest == NULL, flag) || ARGCHECK(test < 0, flag) || ARGCHECK(isTest == false, flag)){ printf("Invalid argument is %0x\n", flag); return; } return;}int _tmain(int argc, _TCHAR* argv[]){ testFunction(NULL, -10, true); return 0;}通过上面的写法可以很容易找到第一个无效的参数,例如我这打印出的flag为2,换算成2进制为0010(由于flag初始化为1,所以看2进制结果时应该从次低位开始),所以这很容易看出是第一个参数出了问题,然后开始调试。
- C/C++利用位运算来进行函数参数检查
- 利用C语言"位域"的特殊性来对数组进行边界检查
- C/C++函数参数使用位或运算
- C语言函数的参数检查
- c利用strtok来进行字符串分割
- C/C++ 利用位运算优化整数乘法
- c 语言笔记.函数和位运算
- C++_利用栈进行运算符表达式的运算
- c基础【一】利用位运算实现数字反转
- C-枚举,位运算
- C语言位运算
- C语言位运算
- 【C++】位运算符
- C语言位运算
- c语言位运算
- 【C++】位运算符
- C语言位运算
- C位运算
- Linux 下 SQL*Plus 上下键不能查看历史命令
- 备忘录链接......
- 【移动开发】sencha touch的不足(移动端开发的推荐)
- ElasticSearch代码的组织形式
- mydate
- C/C++利用位运算来进行函数参数检查
- java位运算
- Python 使用库安装说明
- VC 6.0 静态编译的方法
- Valid Palindrome 检查是否是有效的回文 @LeetCode
- setjmp——longjmp
- Oracle DB NVL、NVL2、NULLIF、COALESCE函数
- Oracle DB 嵌套函数
- 数组与Object的关系及其反射类型(浅试)