首页 > 编程语言 >C/C++ 宏 ##和#和#@

C/C++ 宏 ##和#和#@

时间:2023-03-16 18:34:58浏览次数:42  
标签:__ 双引号 ## 路径 C++ FILE define

##: 起到字面拼接的作用

#define f(a,b) a##b

 f(1,2)等价于12,f(str,1)等价于变量str1

 

#: 把字符串加双引号

#define g(a) #a

g(str)等价于"str"

 

#@:把字符串加单引号

 

值得注意的是,被#或者##修饰的内容,不会再次展开,比如说__FILE__宏,单独出现,会展开成cpp的路径,如果g(__FILE__)就变成了"__FILE__",而不是双引号里加路径

 

那,如果想要双引号里加路径,需要怎么办呢?有一种巧妙的办法,再嵌套一层宏,如下

#define _g(a) #a

#define g(a) _g(a)

这里,再调用g(__FILE__)的时候,而此时并没有出现#抑制展开,所以g(__FILE__)会扩展为_g(你的cpp路径)

再展开为  "你的cpp路径"  ,就可以把__FILE__宏展开,再加双引号了

标签:__,双引号,##,路径,C++,FILE,define
From: https://www.cnblogs.com/shizhimofa/p/17223705.html

相关文章

  • wordpress博客系统用户密码穷举
    这里使用的是kali环境中自带的wpscan,这是一款漏洞扫描工具,当然也可以用来穷举爆破。https://wpscan.com/profile首先注册账号,获取APIwpscan--urlhttp://www.redteam.c......
  • HTML+css轮播图效果
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-wid......
  • 五、自定义登录逻辑
    ​ 当进行自定义登录逻辑时需要用到之前讲解的UserDetailsService和PasswordEncoder。但是SpringSecurity要求:当进行自定义登录逻辑时容器内必须有PasswordEncoder实例......
  • 前端实现防抖和节流(简版&完备)
    前言防抖函数是一种常用的优化方法,可以避免在短时间内频繁触发某个函数而导致性能问题。作用是在一定时间内,如果重复触发同一个函数,只执行最后一次,以减少函数执行次数,节......
  • Codeforces Round 851 (Div. 2) (CF1788) 题解
    CF1788AOneandTwo对于一个序列,题目要求蓝色部分的乘积等于绿色部分的乘积,因为序列中只有\(1\)和\(2\),所以我们只要蓝色部分和绿色部分的\(2\)的数量相等即可,使用......
  • 五、自定义登录逻辑
    ​ 当进行自定义登录逻辑时需要用到之前讲解的UserDetailsService和PasswordEncoder。但是SpringSecurity要求:当进行自定义登录逻辑时容器内必须有PasswordEncoder实例......
  • 狂神说 springboot集成redis
    文章目录1.概述1.1SpringData1.2lettuce2.部分源码2.1自动配置2.2Jedis.pool不生效3.使用4.序列化4.1为什么要序列化4.2为什么要自定义......
  • Mysql
    1.为什么要使用数据库持久化:把数据保存到可掉电式存储设备中已供之后使用,数据持久化意味着将内存中的数据保存到硬盘上加以固化。持久化的作用:将内存中的数据存储在关系......
  • 端云一体化开发-计算十二生肖-云函数
    (目录)1.前言    之前帖子介绍过用不同方式计算十二生肖,也用过Serverless云函数计算,但那时是用Java调用云函数,这次直接使用端云一体化开发,方便了很多,不用手工集成云......
  • rocketMq springboot2 发送广播消息
    广播消息:一个点发送,所有有监听订阅的程序都能收到消息。应用场景:一个配置更新了,其他点都需要知道配置更新需加载。 mq创建主要是创建组时与队列有点区别mqadminupdateSubG......