Утверждение типа отладки независимое? - PullRequest
1 голос
/ 18 февраля 2011

Я написал свою собственную отладку утверждений.

#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 ]

1 голос
/ 18 февраля 2011

Может быть, вы должны просто напечатать их как поплавки.

#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, но это будет работать для обоих типов.

0 голосов
/ 19 февраля 2011

Распечатайте их как строки;это работает для всех типов и печатает фактический текст выражений, а не только их значения:

#define ASSERT_EQUALS(a,b) \
do { \
    if ((a)!=(b)) \
    { \
        printf(". ASSERT_EQUALS (%s:%d) %s!=%s\n",__FUNCTION__,__LINE__, #a,#b); \
    } \
} while (0)     
0 голосов
/ 18 февраля 2011

Используйте переменный макрос и vprintf.Посмотрите на assert.h в вашей библиотеке C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...