根据需要分等级的打印日志(C语言)
2018-06-18 04:02:43来源:未知 阅读 ()
在程序遇到问题调试时,有时候需要打印一些中间变量,观察完调试完又需要把这些打印注释掉,感觉很麻烦。所以写了一个小程序,可以设置打印日志等级。
在主程序设置要打印的日志等级debug,就把相应的等级的日志全部打出来观察。
程序用到了va_list(在C语言中解决变参问题的一组宏),相关知识可参考http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html(注意链接文章正确的程序在评论中) 。
直接上主程序:main.cpp
1 #include"log.h" 2 #include<stdio.h> 3 int debug = 2; //10 为全打 1-9只打相应等级日志 4 int main() 5 { 6 SetDebugLevel(); 7 char s[]="abc"; 8 int k = 7; 9 double kk = 11.5; 10 WriteLog(1 , "1-日志是:%s\n" , "abc"); 11 WriteLog(2 , "2-日志是:%s , k:%d\n" , s , k); //WriteLog(日志等级,格式化字符串 ,不定个数的变量) 12 WriteLog(3 , "3-日志是:%s , k:%d\n" , s , k); 13 WriteLog(4 , "4-日志是:%s , k:%d\n" , s , k); 14 WriteLog(5 , "5-日志是:%s , k:%d\n" , s , k); //debug为5 , 则只打印这一条。 15 WriteLog(6 , "6-日志是:%s , k:%d , kk = %lf\n" , s , k , kk); 16 printf("\n"); 17 return 0; 18 }
日志打印等级debug为2,则只打印第11行。
日志打印等级debug为6,则只打印第15行。
日志打印等级debug为10,则全部打印。
日志打印等级为0(非1-10) , 则不做任何打印(指调用WriteLog的打印)。
调用的程序直接贴代码:
log.h
1 void WriteLog(int , char * ,... ); 2 void SetDebugLevel();
具体实现代码:
log.cpp
1 #include<stdio.h> 2 #include <stdarg.h> 3 4 extern int debug; 5 int debug_flag = 0; 6 void WriteLog(int i,va_list va_alist,...) 7 { 8 va_list args; 9 int level = i; 10 va_start(args ,va_alist); 11 if(debug_flag & 1 << (level - 1)) //注意&和<<优先级 12 { 13 vfprintf(stderr, va_alist, args); 14 } 15 va_end(args); 16 } 17 void SetDebugLevel() 18 { 19 if (debug >= 1 && debug <= 9) 20 { 21 debug_flag |= 1 << (debug-1); 22 } 23 else if(debug == 10) 24 { 25 debug_flag = 255; 26 } 27 }
至此,第一篇随笔结束。希望多多有意义的指教。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:P1605 迷宫
- Z 字形变换 2020-04-14
- windows上编译linux程序代码需要用到的头文件 2020-03-06
- ACM | 算法 | 快速幂 2019-12-04
- 线段树 2019-11-28
- 变量的实现机制 2019-09-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash