DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

宏里面使用:

一、#  转为字符串

#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))         如果使用PSQR("test2”),则编译出错;而使用PSQR(test2),则ok;

#define TEST2(p) (cout<<#p<<endl);    如果TEST2("test2");  输出”test2“。奇怪?

 

二、##  连接两个参数

#define XNAME(n) x##n,如果n为a,则展开后为xa。

 

三、_ _VA_ARGS_ _,C99引入的。

#define PR(...) printf(_ _VA_ARGS_ _)
#define qWiFiDebug(format, ...) printf("[WiFi] "format" File:%s, Line:%d, Function:%s", ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__);
#define pr_err(format, ...) fprintf(stderr, format, ## __VA_ARGS__)
宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错

#define XNAME(n) x##n,如果n为a,则展开后为xa。
posted on   DoubleLi  阅读(394)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2014-06-12 Fedora Linux 下安装配置C开发环境Code::Blocks
2014-06-12 虚拟机安装中文Fedora14和C/C++IDE开发环境
2014-06-12 win7 下使用cygwin
2014-06-12 Vmdk文件如何使用,vmdk导入虚拟机VMware8.0教程
2014-06-12 boost::bind的使用方法
2012-06-12 MFC CListCtrl 使用介绍
点击右上角即可分享
微信分享提示