В моем проекте (который по техническим причинам не должен зависеть от каких-либо внешних библиотек или сторонних источников) я настроил следующее test.h
:
static int rc = 0;
#define TESTCASE( x ) if ( x ) {} \
else \
{ \
rc += 1; \
printf( "FAILED: " __FILE__ ", line %d - " #x "\n", __LINE__ ); \
}
Это прекрасно работает в большинстве случаев.время - если тестовый набор оценивается как true, ничего не происходит.Если тестовый случай оценивается как false, тестовый случай печатается с именем файла и номером строки.
Однако, когда тестовый случай содержит строковый литерал, printf()
в макросе TESTCASE настаивает на интерпретации строкового литерала как частистроки формата (которая оказалась фатальной для определенного тестового примера).
Теперь я размышляю над различными подходами, чтобы получить printf()
для печати всего, что есть в x
(тестовом примере) дословно, но яподойди пустым.Самым близким было использование %c
для печати фиксированного числа символов и передачи текстового регистра (#x
) в качестве параметра printf()
- но я не мог понять, как определить размер #x
,особенно если он содержит ноль байтов (что исключает любое использование strlen()
).
В замешательстве и в недоумении.Помощь