宏与调试函数的结合,防止不输出调试信息时调用调试函数【C语言】

使用“用户通过参数控制输出调试信息的自定义调试函数【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,就不会输出调试信息,程序运行时也没有调用调试函数。

推荐阅读更多精彩内容