C语⾔⾃定义打印宏函数
在调试⼤型项⽬中,打印信息分级和指出打印所在处,更⽅便于解决问题。查阅⽹上的⽂章并加上⾃⼰的修改,实现了个简单的宏打印函数来达到⽬的。宏函数实现在头⽂件中,加上了打印级别来控制打印是否输出,打印级别的设定需在调⽤的.c⽂件中⾃定义(这样做是为了能实现不同⽂件的打印级别能不⼀样,在调试指定⽂件或模块的问题是,能起到屏蔽其他⽆关代码打印的作⽤)。
typedef.h源码:
#ifndef _TYPEDEF_H_
#define _TYPEDEF_H_
自定义函数怎么用c语言#include < stdarg.h>
#define INFO_OUTPUT      3
#define WARNING_OUTPUT  2
#define DEBUG_OUTPUT    1
#define ERROR_OUTPUT    0
//#define DEBUG_LEVEL      DEBUG_OUTPUT
//需在使⽤以下打印宏的.c⽂件中定义“DEBUG_LEVEL”变量
#define INFO_PRINT(info,...)  \
do{ \
if(DEBUG_LEVEL>=INFO_OUTPUT){\
printf("Info %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
#define WARNING_PRINT(info,...)  \
do{ \
if(DEBUG_LEVEL>=WARNING_OUTPUT){\
printf("Warning %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
#define DEBUG_PRINT(info,...)  \
do{ \
if(DEBUG_LEVEL>=DEBUG_OUTPUT){\
printf("Debug %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
#define ERROR_PRINT(info,...)  \
do{ \
if(DEBUG_LEVEL>=ERROR_OUTPUT){\
printf("Error %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
#endif
测试代码main.c:
#include<stdio.h>
#include<Windows.h>
#include "typedef.h"
static int DEBUG_LEVEL = DEBUG_OUTPUT;
void main(int argc,char **argv)
{
INFO_PRINT("hello %s\n", "world!");
WARNING_PRINT("hello %s\n", "world!");
DEBUG_PRINT("hello %s\n","world!");
ERROR_PRINT("hello %s\n", "world!");
while (1)
{
Sleep(1000);
}
打印结果:
注:在宏定义函数printf中info⽤双引号括起来,是因为由于按照使⽤printf函数的习惯,在使⽤的时候的,info传⼊是带双引号括起来的格式化字符串,如:DEBUG_PRINTT("input %d,%s\n",123,"abd");替换到宏⾥⾯的printf则为printf("Debug %s,%s,%d:""input
%d,%s\n""",__FILE__,__FUNCTION__,__LINE__,123,"abd");这⾥利⽤了printf(“number1 ”  "number2 "  "number3"); 等价于printf("number1 number2 number3");的原理(如下图)保证打印输出达到想要的效果。按照这个原理可把DEBUG_PRINTT("input %d,%s\n",123,"abd");替换到宏⾥⾯并拆解成以下语句便能理解:printf("Debug %s,%s,%d:"  "input %d,%s\n"
"",__FILE__,__FUNCTION__,__LINE__,123,"abd");
⽣活不易,如果你觉得该⽂章对你有帮助,请帮忙点个赞 ,如有指教和讨论,请在评论区留⾔⼀起探讨。感谢观看!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。