以为好像发过,没找到。所以重新写一下。技术说明:

  • LOG系列是纯输出
  • DEBUG/FILE系列除了输出,还写入到文件

  某些情况下输出看不到,或者不方便看,写入文件就是首选。

  • 具体用法

  比如你要判断某个函数有没有走到,来一句LOG_HERE();,编译后再测试,就可以看到输出。非常的方便。

  也可以改进一下,增加时间信息。

  • 具体代码
#ifndef FT_TS_LOG_FILE_NAME#if defined(_WINDOWS) || defined(WIN32)
#define __FUNC__    __FUNCTION__
#define FT_TS_LOG_FILE_NAME               "D:\\tsfreetype.log"
#else
#define __FUNC__    __func__
#define FT_TS_LOG_FILE_NAME               "/tmp/tsfreetype.log"
#endif#define LOG_TEXT_ONLY(FMT, ...) char log_text[4096] = {0}; \sprintf(log_text, "%s-%d:" FMT "\n", __FUNC__, __LINE__, ##__VA_ARGS__); \printf("%s", log_text); #define LOG_TO_OUTPUT(FMT, ...) {LOG_TEXT_ONLY(FMT, ##__VA_ARGS__)}#define LOG_FORMAT(FMT, ...)    LOG_TO_OUTPUT(FMT, ##__VA_ARGS__)
#define LOG_TEXT(text)          LOG_TO_OUTPUT("%s", text)
#define LOG_FLOAT(value)        LOG_TO_OUTPUT("%f", value)
#define LOG_INT(value)          LOG_TO_OUTPUT("%d", value)
#define LOG_HERE()              LOG_TO_OUTPUT("");#define LOG_TO_FILE(FMT, ...)   {LOG_TEXT_ONLY(FMT, ##__VA_ARGS__) \{FILE* log_fp = fopen(FT_TS_LOG_FILE_NAME, "a+"); \fwrite(log_text, 1, strlen(log_text), log_fp); fclose(log_fp);}}#define DEBUG_FORMAT(FMT, ...)  LOG_TO_FILE(FMT, ##__VA_ARGS__)
#define DEBUG_TEXT(text)        LOG_TO_FILE("%s", text)
#define DEBUG_FLOAT(value)      LOG_TO_FILE("%f", value)
#define DEBUG_INT(value)        LOG_TO_FILE("%d", value)
#define DEBUG_HERE()            LOG_TO_FILE("");#define FILE_FORMAT             DEBUG_FORMAT
#define FILE_TEXT               DEBUG_TEXT
#define FILE_FLOAT              DEBUG_FLOAT
#define FILE_INT                DEBUG_INT
#define FILE_HERE               DEBUG_HERE#endif

六石编程学:方便调试输出的标准C代码相关推荐

  1. 六石编程学:比垃圾软件更差更可怕的致命软件、剧毒软件

    我们如果认为某个软件太差,一般称之为垃圾软件.一般的,垃圾软件就是指最差的那一批.近来,吾感觉这个想法是有问题的. 前几天,有人在群里说,重运算后,结果不同.也没人当回事.吾是惊出冷汗(其实也没有,因 ...

  2. 六石编程学:抄代码是个技术活,大多数人不传抄

    泰山JDK8完善了TTC类型的字体文件支持.自然的相关代码也进行了相应修改.吾全部重写了泰山OFFICE字体相关代码:删除了大多数代码,重新设计了流程.因为吾是在自己的实验平台上处理的,所以要求跟进. ...

  3. java2实验手册求方程的根_完成实验手册实验六:P101编程题2、3、4 Java程序设计上机实验手册(完稿)_吴娜炯.pdf_学小易找答案...

    [简答题]将一个文件的内容装换为大写,显示出来,并把内容复制到文件中去. [简答题]什么是自主访问控制?什么是强制访问控制? 什么是基于角色的访问控制? [简答题]根据第五课教学视频,实现可视化日历. ...

  4. qdebug 调试 输出乱码_Python里三个最高逼格的调试神器

    调试是开发过程中不可避免的一个环节,在Python中我们使用print.logging.assert等方法进行调试既简单又实用,但毕竟有其局限性.今天这篇文章为大家带来三个工具,其中有Python的内 ...

  5. 通过游戏编程学Python(1)— 猜数字

    通过游戏编程学Python 通过游戏编程学Python(1)- 猜数字 文章目录 通过游戏编程学Python 前言 一.知识点 二.第一个游戏 -- 猜数字 1. 玩法简介 2. 游戏流程 三.程序代 ...

  6. CSDN 第六期编程竞赛做题记录

    CSDN 第六期编程竞赛做题记录 -- CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 9.18周日闲来无视写一下 csdn 的编程题,每期编程 ...

  7. Python123第六周编程题

    Python123中第六周编程题 1.获得用户输入的一个整数N,输出N中所出现不同数字的和.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬ ...

  8. 《少年编程反汇编逆向调试入门》录制成功

    少年编程反汇编逆向调试入门 编程要从娃娃抓起,邕城少年编程在行动 让我们一起来编程 手把手教你逆向编程,传授最先进的逆向调试技术,逆向分析系统化工程化,逆向编程不是梦. 李炎 2005年开始反汇编逆向 ...

  9. ITECH IT63XX/ IT90XX系列可编程直流电源RS-232调试记录

    ITECH IT63XX/ IT90XX系列可编程直流电源RS-232调试记录 ITECH IT63XX/ IT90XX是由艾德克斯电子有限公司产品. 本次记录设计PC上位机通过RS-232控制程控电 ...

  10. 通过游戏编程学Python(4)— 猜成语(上)

    通过游戏编程学Python 通过游戏编程学Python(3)- 赌大小 通过游戏编程学Python(2)- 脑筋急转弯 通过游戏编程学Python(1)- 猜数字 文章目录 通过游戏编程学Python ...

最新文章

  1. XtraBackup
  2. 使用PL/SQL Developer远程连接到oracle11g
  3. 微信企业号OAuth2.0授权-Java
  4. 在家学习的核心就是专注
  5. C/C++02: Josephus问题
  6. 百战java课程_java百战程序员SpringBoot视频教程
  7. ActivityMQ入门案例
  8. 微PE系统盘制作 / 重装系统
  9. 《大型网站技术架构》学习笔记
  10. CATIA软件基础操作及知识工程
  11. 【高等数学】微积分----教你如何简单地推导求导公式(二)
  12. html传参,css接受?What 弄啥嘞?
  13. zTree简单暴力修改图标样式
  14. 杂散干扰解决办法_F频段干扰问题的几种解决方案
  15. 联想拯救者R7000P2021安装Ubuntu双系统
  16. QQ9.0需要安装两个插件
  17. 安安猜价格聪明机器人_2021年智慧树APP不动产估价第八单元章节测试答案
  18. 110款表白网站源码,搭建表白网站必备,总有一款适合你
  19. redis之地理位置
  20. 什么是“反射”和“内省”?

热门文章

  1. 【图论】用匈牙利算法找女朋友(纯爱党的大胜利)
  2. linux执行hadoop程序,gcc编译和运行hadoop c api程序
  3. CSDN博客停用公告
  4. ASP.NET连接数据库实现登录和注册
  5. html怎么读取2进制视频,IE 中如何读取二进制文件的内容?
  6. java环境一键配置下载地址_java环境一键配置-java环境一键配置下载 v1.0免费版-下载啦...
  7. 通讯工程考研考计算机专业跨度大么,通信工程专业,与自动化专业差别大吗?考研可以跨考吗?...
  8. php json替换,php解决json中中文部分被替换为unicode编码
  9. 微信小程序sass不编译怎么办_不吹牛,四款免费实用的微信小程序,打开立即使用!...
  10. 用 IIS 进行ASP.NET 成员/角色管理(1):安全和配置概述