使用“用戶通過(guò)參數(shù)控制輸出調(diào)試信息的自定義調(diào)試函數(shù)【C語(yǔ)言】中的方法戈抄,不論是否輸出調(diào)試信息离唬,都需要調(diào)用調(diào)試函數(shù)。
這里通過(guò)定義宏划鸽,使得在不輸出調(diào)試信息時(shí)输莺,不調(diào)用調(diào)試函數(shù)戚哎。
我們?cè)诔绦蛑卸x了宏debug,而在宏里面決定是不是調(diào)用調(diào)試函數(shù)__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;
}
如果我們把這個(gè)程序編譯為fact.exe
則執(zhí)行 fact 250型凳,會(huì)輸出調(diào)試信息,程序運(yùn)行時(shí)調(diào)用了調(diào)試函數(shù)嘱函。
執(zhí)行 fact 0 或者 fact甘畅,就不會(huì)輸出調(diào)試信息,程序運(yùn)行時(shí)也沒(méi)有調(diào)用調(diào)試函數(shù)往弓。