关于linux中DBG调试宏的使用总结,减少代码冗余
/*
三个点 ... (C语言变参)
如果是是形参里面出现,表示的是可变参数,即表示的传入的参数个数是可变,传多少个参数都被放到一个数组里面
C语言预处理器定义的一些宏 :
__LINE__ 当时行号(预处理器正在执行的那一时刻),十进制数
__FUNCTION__ 当时函数,字符串
__FILE__ 当时文件,字符串
__DATE__ 当时日期,字符串
__TIME__ 当时时间,字符串__VA_ARGS__ 指打印宏里面的可变参数,也就是函数参数里面的...
*/
#define DEBUG#ifdef DEBUG
#define DBG(...) fprintf(stderr, " DBG(%s, %s(), %d): ", __FILE__, __FUNCTION__, __LINE__); fprintf(stderr, __VA_ARGS__)
#else
#define DBG(...)
#endifint main(void)
{DBG("tiaoshi.\n");return 0;
}
/*
内核中的DEBUG宏
#ifdef DEBUG_S3C_MEM
#define DEBUG(fmt, args…) printk(fmt, ##args)
#else
#define DEBUG(fmt, args…) do {} while (0)
#endif
args…其实代表可变参数的意思,参数可以是零个,例如在使用时,可以如一下方式:
#define PRINT_DEBUG(fmt,args…) do{ if(a>b) {printf(fmt,##args); } }while(0)
PRINT_DEBUG(“hello word\n”);
PRINT_DEBUG("%s\n",“hello word”);
PRINT_DEBUG("%s %s\n",“hello”," word");
为何是“#define debug(fmt,args…) printf (fmt ,##args)”这种宏定义方式呢?
<1> #define debug(fmt,args) printf (fmt ,##args)
当不定参数多于1个,会提示参数多于agrs对应的参数
<2> #define debug(fmt,…) printf (fmt ,##args)
这种情况agrs找不到对应项
<3> #define debug(fmt,…) printf (fmt ,…)
这种情况下,不定参数在预编译时全部被替换成“…”
<4> #define debug(fmt,args…) printf (fmt ,args)
我测试了,也是可以的
<5> #define debug(fmt,args) printf (fmt ,##args)
u-boot使用的方法
*/
关于linux中DBG调试宏的使用总结,减少代码冗余相关推荐
- 《Linux C编程从入门到精通》》一2.4 Linux中的调试环境gdb
本节书摘来自异步社区<<Linux C编程从入门到精通>>一书中的第2章,第2.4节,作者 宋磊 , 程钢,更多章节内容可以访问云栖社区"异步社区"公众号查 ...
- 【工具】VScode|Linux 中怎么调试 Python 项目比较方便?又名 VScode 怎么调试 Python 项目(兼容环境Ubuntu18.04)
使用过 Anaconda.Jupyter.Pycharm.VScode.VS2022.pdb 这几个 IDE 去编写 python 项目或者维护 python 环境,各有各的优缺点,但 VScode ...
- python中ls是什么_使用Python代码实现Linux中的ls遍历目录命令的实例代码
一.写在前面 前几天在微信上看到这样一篇文章,链接为:https://www.jb51.net/it/692145.html,在这篇文章中,有这样一段话,吸引了我的注意: 在 Linux 中 ls 是 ...
- Linux中的/proc文件系统详解(C/C++代码实现)
Linux /proc这个特殊的目录包含有关Linux系统的所有详细信息,包括其内核.进程和配置参数.通过研究/proc目录,可以了解Linux命令的工作原理,甚至可以执行一些管理任务. 走进Linu ...
- 在子类中对get(), set() 方法进一步整合 减小代码冗余度
前言: 我们都知道,封装是面向对象的核心思想.通常要对一些类进行封装(即属性private化,只提供一套public的get(),set()方法供外界访问),而当一个类的属性较多时候,那么创建一个该类 ...
- linux中多进程调试,linux下用gdb调试多进程
今天来学习一下linux下gdb如何调试多进程,在学习之前我我们能先看一张表: 这张表是gdb调试的命令表,这对那些对gdb不熟的同学来说是非常有必要的. 一.多进程调试的命令 1.set follo ...
- 嵌入式Linux中TP调试笔记
触摸屏一般是通过IIC来传输触摸点的坐标给Linux内核,一般而言,其步骤是: 当人触摸触摸屏时,触摸屏会产生一个中断信号给Linux内核,内核接收到中断信号后便会通过IIC去触摸IC里读取数据,因此 ...
- Linux 中的调试器——gdb的基本调试命令打字练习
工欲善其事,必先利其器--首先我们需要有打字练习的工具 ,这里我推荐的是 金山打字通,下载链接为
- Linux中main和初启函数,ARM启动代码中_main 与用户主程序main()的区别
//wings: 汇总如下: 1._main是编译系统提供的库函数,main()是用户自己编写的主函数: 2._main主要做了三件事: ①将code/RW搬到ram中: ②初始化ZI数据: ...
最新文章
- Maya制作风格化的女性跑步动画学习教程
- linux遭入侵挖矿进程被隐藏案例分析
- 怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
- fcm模糊聚类matlab实例_一文学会使用MATLAB将仿真、试验数据可视化附带源程序
- markdown一边写一边预览_如何用Markdown轻松排版知乎专栏文章?
- 【Linux系统编程】进程替换:exec 函数族
- 判断用户的参数(条件测试语句)
- [js] 使用js实现一个图片剪裁的功能
- 近10万人基因组数据!美国All of Us项目发布首批人群队列数据
- 【报告分享】2021人才资本趋势报告:重塑时代-BOSS直聘.pdf(附下载链接)
- SQL Server 2008安装和配置图解图(转)
- topjui中datagrid增删改查
- Android WebView调用摄像头录像拍照处理
- 黎曼Zeta函数,人类文明黎曼Zeta函数,人类文明永恒的的纪念
- 第二部分 项目管理标准
- 在windows上配置本地域名解析,配置hosts文件
- Minecraft 1.18.1、1.18.2模组开发 19.拼图结构建筑(JigSaw Structure)
- 西安理工大学计算机科学与工程学院官网,罗靖-西安理工大学计算机科学与工程学院...
- vue3 接入网易易盾(webpack,vite)
- 水利部水利工程造价系统