【发布时间】:2010-06-24 09:15:48
【问题描述】:
在我的一个项目中(出于技术原因,不得依赖任何外部库或第三方资源)我设置了以下test.h:
static int rc = 0;
#define TESTCASE( x ) if ( x ) {} \
else \
{ \
rc += 1; \
printf( "FAILED: " __FILE__ ", line %d - " #x "\n", __LINE__ ); \
}
这在大多数情况下都可以正常工作 - 如果测试用例评估为 true,则不会发生任何事情。如果测试用例评估为假,则打印测试用例,包括文件名和行号。
但是,当测试用例包含字符串文字时,TESTCASE 宏中的printf() 坚持将字符串文字解释为格式字符串的一部分(这对某些测试用例来说是致命的)。
现在我正在考虑各种方法来让printf() 逐字打印x(测试用例)中的任何内容,但我发现是空的。最接近的方法是使用%c 打印固定数量的字符,并将文本大小写(#x)作为参数传递给printf() - 但我不知道如何确定#x 的大小,特别是如果它包含零字节(这排除了strlen() 的任何使用)。
困惑,不知所措。帮忙?
【问题讨论】: