一般在写一个项目的时候,为了更直观的调试,我们在程序里都会打printf调试语句,随着项目越写越多,printf也会越来越多,但项目准备结尾的时候,这时候开始优化就会发现,你想完全把printf语句都删除了,又怕后面项目出问题找不到问题点在哪里,不删项目一执行就有好多调试语句干扰观察,同时还会拖慢系统,影响效率,这点在单片机上是见怪不怪了,还有一种情况,有时候打印会打相同的消息,这样就分不清到底是哪个函数打印的,于是找问题都要找好久,于是我们需要一个更加有艺术感的调试封装。

#define __DEBUG_VERSION#ifdef __DEBUG_VERSION    #define DEBUG(format,...)  printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)#else    #define DEBUG(format,...)#endif

如上代码,当定义了__DEBUG_VERSION,使用DEBUG函数就会执行

printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)

如果没有定义,那么就什么都不会执行,我们可以在第一篇文章那个例程里实验看看:

#include #include "iniparser.h"#define CONFIG_NAME "Config.ini"#define __DEBUG_VERSION#ifdef __DEBUG_VERSION    #define DEBUG(format,...)  printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)#else    #define DEBUG(format,...)#endifvoid Create_Default_InI_File(void){    FILE *Default_ini = NULL ;    Default_ini = fopen(CONFIG_NAME,"w");    fprintf(Default_ini,        "[Setting]\n"        "INIT_FLAG=0;\n"        "VOLUME=1;\n"        "LANGUAGE=1;\n"    );    fclose(Default_ini);}int main(void){  int Init_flag ;  int Volume_flag ;  int English_flag ;  /*1、创建一个默认的Config.ini文件*/     Create_Default_InI_File();    /*2、解析Config.ini文件获得参数*/    dictionary  *Config_ini = NULL;    /*3、加载Config.ini文件*/     Config_ini = iniparser_load(CONFIG_NAME);    if(NULL == Config_ini)    {      printf("cannot parse %s file\n",CONFIG_NAME);      return -1 ;  }  /*4、将字典转储到打开的文件指针。*/  iniparser_dump(Config_ini,stderr);  /*5、分别获取上述创建的InI文件里的几个项目的值*/  Init_flag = iniparser_getint(Config_ini,"Setting:INIT_FLAG",-1);  Volume_flag = iniparser_getint(Config_ini,"Setting:VOLUME",-1);  English_flag = iniparser_getint(Config_ini,"Setting:LANGUAGE",-1);  DEBUG("Init_flag:%d\n",Init_flag);  DEBUG("Volume_flag:%d\n",Volume_flag);  DEBUG("English_flag:%d\n",English_flag);  /*5、更改其中的INIT_FLAG项的值*/  iniparser_set(Config_ini,"Setting:INIT_FLAG","1");  Init_flag = iniparser_getint(Config_ini,"Setting:INIT_FLAG",-1);  Volume_flag = iniparser_getint(Config_ini,"Setting:VOLUME",-1);  English_flag = iniparser_getint(Config_ini,"Setting:LANGUAGE",-1);  DEBUG("Init_flag:%d\n",Init_flag);  DEBUG("Volume_flag:%d\n",Volume_flag);  DEBUG("English_flag:%d\n",English_flag);  /*6、释放字典*/  iniparser_freedict(Config_ini);    return 0;}

运行结果:

当你打印的时候,调试会告诉你这是哪个文件哪一行打的,是不是很方便?但是这样的仅仅起到一个要不全部不执行,要不全执行的效果。如果想做更强大一点,那我们可以结合C语言宏定义的特性把这个再给优化一下,这点留给读者自己去尝试。

语言 读ini文件_让C语言的调试更加高大上相关推荐

  1. c语言读h5文件,我利用C语言实现SHA-256算法,需要从一个txt文件中读出数据并把...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 并把得到的密文写入另一个txt文件张该怎么改代码啊? #include #include extern char* StrSHA256(const cha ...

  2. c语言中建一个文件的语法,C语言语法介绍_文件.ppt

    C语言语法介绍_文件 第十三章 本章要点 文件的基本概念 文件的基本函数 文件的顺序读写 文件的随机读写 文件简单应用 主要内容 13.1 C文件概述 13.2 文件类型指针 13.3 文件的打开与关 ...

  3. 易语言读文本内容_易读性如何使文本易于阅读

    易语言读文本内容 Your first step in making your texts legible is to understand what legibility means. It is ...

  4. 使用c语言实现INI文件的读写

    INI文件是Windows上独有的一种存储结构,这只是Windows下发明的存储结构,也有很多类似的,比如xml! 就说一下TXT文本 是按行读取,这就是它的格式! 而xml是类似二叉树的带层次结构的 ...

  5. go语言的ini文件配置读取

    项目中我们可能经常要读取配置文件.那么如何读取自己写的配置文件呢?答案是反射.下面举例mysql的配置文件读取的具体操作代码. 1.首先建立myconfig.ini文件,并写入以下内容: [mysql ...

  6. linux读ini文件,Linux下INI文件解析

    一个linux下的ini文件解析模块. 因为工作需要, 需要在linux环境去解析ini配置文件. 个人写了一个委简单ini解析模块. 先记录下ini文件的格式 ini文件的格式为 [section1 ...

  7. java和c语言有关联吗_关于JAVA语言,和C语言有什么联系吗?

    展开全部 Java语言由语法规则和类库两部分组成,其中语法规则确定了Java程序的书写规范,62616964757a686964616fe59b9ee7ad9431333337626264学习好语法规 ...

  8. c语言api文档_初学 C 语言没有项目练手?这 20 个小项目拿走不谢

    C 语言是大多数人的编程入门语言,但很多初学者在学习的过程中难免会出现一些迷茫,比如:不知道 C 语言可以开发哪些项目,可以应用在哪些实际的开发中--今天我们收集了 20 个 C 语言练手项目,提供了 ...

  9. c语言 算术平均滤波法_基本C语言滤波算法

    11种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 /*  A值可根据实际情况调整 value为有效值,new ...

最新文章

  1. Jquery tmpl模板中if条件有多个时的写法
  2. GCC-__attribute__()(一)属性机制
  3. 错误1083:配置成在该可执行程序中运行的这个服务不能执行该服务 【解决办法】...
  4. SQL SERVER2000教程-第二章-创建和管理数据库 第六节 压缩数据库
  5. 计算机如何用vb文本加密,信息加密与隐藏工具的设计与实现VB231
  6. mysql中如何把两个查询结果列数不同并成一张表_MySQL
  7. BAT Java面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
  8. BugkuCTF-Reverse题First_Mobile(xman)
  9. Deep Learning Papers
  10. JSTL EL 详解
  11. gitlab syntax highlighting theme
  12. TcPlayer腾讯播放器
  13. Maven系列第4篇:仓库详解
  14. excel如何把顺序倒过来_excel怎么把顺序倒过来
  15. html背景色坐标,【已解决】Html的Canvas设置全局背景色
  16. 线程插队--Join方法
  17. 使用机器学习预测天气_使用机器学习来预测患者是否会再次入院
  18. APP端测试常见的功能点
  19. MySQL8.0密码找回与权限刷新
  20. 计算机英语论文及翻译,计算机专业英语翻译小论文

热门文章

  1. 不简单的 SimpleDateFormat
  2. java后台环境搭建_后端-java环境搭建
  3. 2015c语言成绩查询,2015年3月全国计算机二级C语言选择第1套
  4. 【redis】redis简介及基本数据结构的操作
  5. 软工文档”注意注意“事项
  6. `pydot` failed to call GraphViz.Please install GraphViz
  7. sge resnet
  8. 轻量级神经网络:ShuffleNetV2解读
  9. python3 局域网udp广播
  10. 'utf-8' codec can't decode byte 0xb6 in position 34: invalid start byte