C语言的assert函数在判断失败时,会停止程序执行,这在某些场合——比如自动化测试——是非常不方便的,这时只需要打印一个错误提示,然后继续执行后面的 测试项
我参考了网上一篇讲述C语言的单井号和双井号在预处理中应用,写了一个自己的实现:
#include <stdio.h>
#include <stdlib.h>
#define OSS_ASSERT(expr) do{if (!(expr)) printf("error at file %s & line %u " #expr "\n", __FILE__, __LINE__);}while(0)
int main()
{
OSS_ASSERT(1 == 2?1:0);
return 0;
}
要点有以下几个:
- printf函数的第一个参数——格式化串——其实是可以分几个引号来写的,例如printf(“whp ps”)等价于printf(“whp " "ps")
- 单井号后面跟一个宏变量,可以将宏变量替换的内容转换成字符串的形式,并与其他字符串通过空格相连
- __LINE__是%s格式,__LINE__是%u格式,不能弄混了