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

简介: 六石编程学:方便调试输出的标准C代码

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

  • 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
目录
相关文章
|
6月前
|
程序员 编译器 C语言
编程最重要的技术之一 — 调试(以C语言代码为例)
编程最重要的技术之一 — 调试(以C语言代码为例)
104 0
|
6月前
|
前端开发 算法 JavaScript
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
131 0
|
存储 C语言
c语言程序的框架以及内容
c语言程序的框架以及内容
231 0
|
程序员 C语言 C++
编程最重要的技术—调试(以C语言代码为例)
编程最重要的技术—调试(以C语言代码为例)
|
测试技术 C语言 C++
【c++/c】C语言“小小计算器”基本功能实现(包含12个实验一篇足以)
C语言“小小计算器”基本功能实现(包含12个实验一篇足以)【期末大作业】
506 1