断言调试类型是独立的吗?

时间:2011-02-18 20:20:17

标签: objective-c c

我已经编写了自己的断言调试。

#define ASSERT_EQUALS(a,b) \
do { \
    if ((a)!=(b)) \
    { \
        printf(". ASSERT_EQUALS (%s:%d) %d!=%d\n",__FUNCTION__,__LINE__,a,b); \
    } \
} while (0)     

然而它只与整数类型兼容。有没有办法可以改变这个,所以我也可以支持float / double类型?

感谢。

3 个答案:

答案 0 :(得分:1)

也许你应该把它们打印成花车。

#define ASSERT_EQUALS(a, b) \
  do { \
    if ((a)!=(b)) { \
      printf(". ASSERT_EQUALS (%s:%d) %f!=%f\n",__FUNCTION__,__LINE__,(float)(a),(float)(b)); \
    } \
  } while (0)

整数看起来很糟糕,例如1会显示为1.00000,但它适用于这两种类型。

答案 1 :(得分:0)

将它们打印为字符串;这适用于所有类型并打印表达式的实际文本,而不仅仅是它们的值:

#define ASSERT_EQUALS(a,b) \
do { \
    if ((a)!=(b)) \
    { \
        printf(". ASSERT_EQUALS (%s:%d) %s!=%s\n",__FUNCTION__,__LINE__, #a,#b); \
    } \
} while (0)     

答案 2 :(得分:-1)

使用可变参数宏和vprintf。查看C库中的assert.h