使用“用户通过参数控制输出调试信息的自定义调试函数【C语言】中的方法,不论是否输出调试信息,都需要调用调试函数。
这里通过定义宏,使得在不输出调试信息时,不调用调试函数。
我们在程序中定义了宏debug,而在宏里面决定是不是调用调试函数__debug。
示例程序:
#include <stdio.h>
#include <stdlib.h>/* atoi() */
#include <stdarg.h>
int debug_level;
#define debug(level, fmt, arg...) \
if( level <= debug_level ) __debug(fmt, ##arg)
void __debug(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
}
int fact(int n)
{
int i, f = 1;
for( i=1; i<=n; i++)
{
f *= i;
debug(250, "i=%d ; f=%d\n", i, f);//这里使用的是宏
}
return f;
}
int main(int argc, char *argv[])
{
if ( argc < 2 )
{
debug_level = 0;
}
else
{
debug_level = atoi(argv[1]);
}
printf( "4!=%d/n", fact(4) );
return 0;
}
如果我们把这个程序编译为fact.exe
则执行 fact 250,会输出调试信息,程序运行时调用了调试函数。
执行 fact 0 或者 fact,就不会输出调试信息,程序运行时也没有调用调试函数。