vc2017 linux printf,C/C++中自定义信息输出——printf与宏的配合使用

在C/C++中,提起“宏”多少有些皱眉,至少我在入门C++时旁人好心提醒:尽可能地使用typedef与const常量定义来替代“宏”的使用:

1. 类型宏定义

#define HANLE void*

//可以替换为:

typedef void *HANLE;

2. 常量定义

#define MAX_LIMIT 4096

//可以替换为:

const int s_MAX_LIMIT 4096;

因为宏定义是在预编译阶段,对内容进行直接替换,因此无法提供安全的类型检查等功能。

但我本次要说的是,宏的一个很炫的应用:

配合printf函数能够方便地自定义输出格式和内容。

举例来说吧,就是用户在程序中调用:

USER_PRINT( "i should checkout: v_a value is %d.\n", value_a );

能够输出类似信息

[2013-10-01 15:18:28][Fox Test][PID:2486]i should checkout: v_a value is 10.

当然,如果你用过linux下的syslog,你会发现这条输出信息算是“高仿”了。syslog可是linux下调试/监控的优秀组件,简单易用不说,功能也比较完备!

扯远了,本次的目标就是如何在用户简单输出一条信息的时候,我们能够同时加上各种附加信息,包括时间/用户/PID等参数,方便我们的调试/监控。

1. 首先,提供一个有意思的宏,该宏也是该功能的核心

#define USER_PRINT_BASE( format, args... )  printf( format, ##args )

是不是看到args...有点儿蒙,以及##args又是闹哪样?

说明一下:

i: args...是一个参数,是C/C++中定义变参函数(参数不固定)的一种格式。至于举个变参函数的例子,printf/scanf什么的就是随处可见的例子。

ii: ##args是宏的一个特殊语法应用(和普通的##宏应用不同[TODO]),使得宏展开时可以去掉可能存在的多余的','。

举例:

当没有##时,USER_PRINT_BASE( "something debug" )在宏展开时会成为printf( "something debug", )多了一个逗号!

当然,如果你调用USER_PRINT_BASE( "something debug--%d", 10 )的时候,即使没有'##'也不会出错。

iii: 如果你的编译器支持C99规范,那么宏也可以改写为:

#define USER_PRINT_BASE( format, ... )   printf( format, ##__VA_ARGS__ )

嗯好吧,其实只是变参的书写格式发生了点变化。

注:ii与iii详细的可以参考“C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用”,里面有很详细的介绍

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这是我看过,最好懂的神经网络

来源:图灵教育猜一猜,下图中是什么动物?图1 看图猜动物尽管图中的动物胖得出奇,你也应该能够猜到它是一只长颈鹿。人类的大脑拥有强大的辨识能力,它是一个由差不多 800 亿个神经元组成的复杂网络。即使某物并非我们熟知…

上位机软件用什么写的_python7天训练营 | 为什么大家都开始用python写论文了?...

谈及保研,“内卷”被大家吵得沸沸扬扬。但其实,不仅是夏令营申请竞争、推免资格评比等环节,就连最基本的论文,也开始卷了起来。就以大家最常写的实证类论文为例:前两年,很多社科和经管的学科,夏…

美国如何发展脑科技

来源:蓝海长青智库作者:王小理、韩雪、薛淮大脑是理解自然和人类本身的“终极疆域”,脑科技是科研领域“皇冠上的明珠”。相比欧洲“人类脑计划”的迟缓,美国“推进创新神经技术脑研究计划”(BRAIN)进展颇为…

关于mysql ERROR 1045 (28000)错误的解决办法

错误情景: 使用Navicat打开mysql的时候弹出错误框 错误代码: ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: YES) 解决步骤: 1.找到配置文件my.ini &#xff0…

欧洲将研究具备自学习能力的无人机“蜂群”

来源:空天防务观察2019年10月23日,美国《防务新闻》网站报道称:芬兰将发展人工智能列为其领导欧洲联盟理事会六个月任期的关键目标,并提出了“压制防空无人机蜂群”(SEAD Swarm)项目,以迷惑、瘫…

表格打印没有左边线_office办公软件Excel表格的打印技巧,建议收藏

很多新手使用办公软件过程中,对于Excel的打印出现了诸多问题,今天我们就一起来看看表格打印的几个技巧!打印预览时网格线怎么不见了?如何调整打印区域的页边距?如何设置单色打印?......这些打印时遇到的麻烦…

符号说明表怎么做_能看懂这些房屋施工图,说明你家装修没问题了

一、基本知识1、标高1.1绝对标高亦称绝对高程或海拔高度,我国把青岛附近黄海的平均海平面定为绝对标高的零点,全国各地的标高均以此为基准。1.2标高是把某地点对应的绝对标高定义为0.000,(如名辉12#楼27.5)也称相对标高。建筑中一般以一层室内地面对应的绝对标高为0…

【ARM-Linux开发】U-Boot启动过程--详细版的完全分析

------------------------------------------------------------------------------------------------------------------------------------------- 我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 在…

一文看懂RISC-V:异构IoT时代全新架构

来源: 芯潮近两年来,在ARM和Intel主导的竞争格局中,新的开源指令集架构RISC-V在芯片江湖声名鹊起。我们将指令集分为三种:1、复杂指令集(CISC):x86;2、精简指令集(RISC&a…

谷粒商城三阶段课件_苏科版初中物理九年级上册二、变阻器公开课优质课课件教案视频...

课题: 14.2变阻器教学目标:1.知道滑动变阻器的构造及工作原理。2.能画出滑动变阻器的结构示意图和符号。3.会正确连接和使用滑动变阻器。4.了解生活中变阻器的一些应用。教学重点、难点:重点&a…

小牛地图矢量抓取工具_SEO优化网站sitemap需要注意哪些要点才能很好的被百度蜘蛛抓取...

SEO优化网站sitemap需要注意哪些要点才能很好的被百度蜘蛛抓取一、全部链接真实有效。地图的主要目的是方便搜索引擎蜘蛛抓取的,如果地图存在死链,会影响网站在搜索引擎中网站权重的,要仔细检查有无错误的链接地址,提交前通过站长…

【加州理工】什么是模仿学习(Imitation Learning(模仿学习), 这62页ppt带你了解进展...

来源:专知【导读】Imitation Learning(模仿学习)机器学习新的研究热点之一,因其能很好的解决强化学习中的多步决策(sequential decision)问题,近段时间得到了广泛关注。那么模仿学习近期的前沿进…

ios12完美深色模式插件_分屏插件更新支持 A12,一心二用真滴爽

在众多iOS越狱插件中,总有几款亘古不变的插件一直深受大家的喜爱,分屏类插件就是其中之一。之前少年也介绍过几款好用的分屏 App,但是因为自己手持“真香” XR 机,而之前介绍的插件也一直没有适配 A12 设备,所以一直没…

人工智能三大驱动力背后的CMOS传感器

来源:智东西随着人工智能概念逐渐成为科技界最炙手可热的话题,这一依托芯片产业的全新概念牵动了整个科技界的心。依靠政府的大力扶持、潜在市场的巨大规模以及已经逐渐落地的海量应用场景,中国已然成为世界上潜力最大的人工智能市场之一。在…

css —— 图片环绕+首行缩进

1.利用css实现图片环绕文字的效果: 只需要给img标签设置float:left/right即可; 2.实现上段文字首行缩进两个字的效果: 使用 text-indent: 2em;即可(em为相对单位,2em相当于两个汉字的距离) 转载…

西华大学c语言期末成绩占比例,期末成绩开始录入!优秀率一般不得超过20%

原标题:期末成绩开始录入!优秀率一般不得超过20%各学院(系):2020-2021学年秋季学期本科生期末成绩录入工作将在新版本科教学一体化信息平台中进行,为了更好地协助任课教师了解本次成绩录入工作,在录入通知正…

c语言商品货架管理_汽配仓库布局及管理

奥玛物流仓储平台我们平台在全球已经发展超过40,660多个联盟成员,遍布全球665个城市,提供超过6亿平方米的仓库空间,并为60,000个用家服务,如想找物流服务或加入我们,可关注公众号 或 登陆网址www.oym56LM.com&#xff…

沈浩:博弈论在人工智能中的应用

转自 ∑ 沈浩老师最近看到一篇不错的文章,让沈雨尘帮助整理一下,与同学们分享!概览什么是博弈论?它是如何应用到人工智能(AI)中的?人工智能中的博弈论是一个迷人的概念,每个人应该有一定了解。我们希望通过…

更新node_kubernetes证书更新

适用环境:kubeadm部署的k8s集群,默认证书位置为/etc/kubernetes/pki如果环境中证书目录为非pki(以ssl为例),则需创建对应软连接。本文以高可用集群为例(3 master)master节点:查看证书…

python 3 关于requests库的 text / content /json

最近在爬SDFDA的数据,刚开始用urllib.request 库,一直连不到数据 ; 后来通过CHROME浏览器的F12,发现该 网站用的是JSON格式{}Content-Type: application/json,},不同于以往的提交方式“Content-Type: text/html; chars…