摘抄的一些比较实用的宏定义

来源:互联网 发布:最全网络理财服务 编辑:程序博客网 时间:2024/06/16 17:33

///////////////////////////////////////////////////////////////////////////////////////////////////////////

//以下代码来自google glog,备注由我自己添加,见笑啦!

 

//当表达式cond的结果为FALSE时,打印日志并退出

#define EXPECT_TRUE(cond)                               /
  do {                                                  /
    if (!(cond)) {                                      /
      fprintf(stderr, "Check failed: %s/n", #cond);     /
      exit(1);                                          /
    }                                                   /
  } while (0)

 

//当表达式cond的结果为TURE时,打印日志并退出

#define EXPECT_FALSE(cond)  EXPECT_TRUE(!(cond))

 

//op是操作符,例如“==”  “!="  “>="  “<="  “&&"  “||"  ">“ “<"  等等

//当(val1 op val2)的值为FALSE时,打印日志并退出

#define EXPECT_OP(op, val1, val2)                                       /
  do {                                                                  /
    if (!((val1) op (val2))) {                                          /
      fprintf(stderr, "Check failed: %s %s %s/n", #val1, #op, #val2);   /
      exit(1);                                                          /
    }                                                                   /
  } while (0)

 

//对上面宏的实用

#define EXPECT_EQ(val1, val2)  EXPECT_OP(==, val1, val2)
#define EXPECT_NE(val1, val2)  EXPECT_OP(!=, val1, val2)
#define EXPECT_GT(val1, val2)  EXPECT_OP(>, val1, val2)
#define EXPECT_LT(val1, val2)  EXPECT_OP(<, val1, val2)

 

 

//验证val1和val2是否相等 精确度为0.001

#define EXPECT_DOUBLE_EQ(val1, val2)                                    /
  do {                                                                  /
    if (((val1) < (val2) - 0.001 || (val1) > (val2) + 0.001)) {         /
      fprintf(stderr, "Check failed: %s == %s/n", #val1, #val2);        /
      exit(1);                                                          /
    }                                                                   /
  } while (0)

 

//验证C字符创是否相等

#define EXPECT_STREQ(val1, val2)                                        /
  do {                                                                  /
    if (strcmp((val1), (val2)) != 0) {                                  /
      fprintf(stderr, "Check failed: streq(%s, %s)/n", #val1, #val2);   /
      exit(1);                                                          /
    }                                                                   /
  } while (0)