宏定义中的 # 和 ##

news/2024/7/7 20:02:06

工作需要,被迫看了一段老外编写的C++代码,开始被老外绕了一通,最后找到了原因.老外真是牲口,妈的啥技巧都用,查了一下书知道了几个#号在#define宏定义中的特殊用法,不过这东西好像在特殊情况下的确会有些用途,不防分享一下,我也是从网上抄来的,不好意思:   

    1. #:在宏展开的时候会将#后面的参数替换成字符串,如:

          #define p(exp) printf(#exp);

       调用p(asdfsadf)的时候会将#exp换成"asdfsadf"

    2. ##:将前后两个的单词拼接在一起。例如《The C Programming Language》中的例子:

          #define cat(x,y) x##y

       调用cat(var, 123)展开后成为var123.

    3. #@:将值序列变为一个字符

          #define ch(c) #@c

       调用ch(a)展开后成为'a'.

    看看是不是很好玩,也许特殊情况下,用一次也很有趣.


http://www.niftyadmin.cn/n/2760056.html

相关文章

ISO文件怎么安装?

iso是光盘映像文件,打开iso文件有几种方法: 1.使用光盘映像工具软件或者虚拟光驱才能打开iso文件。像软碟通(UItraISO)就是一个很好的光盘映像工具软件,使用它就可以打开iso文件,提取里面的安装程序到硬盘进…

Linux之父炮轰 “全球最大同性恋网站” GitHub:Merge制造了毫无用处的垃圾信息!...

点击上方“Github中文社区”,关注触达Github项目第049期原创分享 作者:huber大家好,我是Huber!今天给大家聊下近期发生的一件在开源界的有意思的事情。说起开源,必定离不开GitHub啊。最近呢, Linux 之父 Linus 直接指出 GitHub 的…

Session小案例------完成用户登录

Session小案例------完成用户登录 在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后。进入主界面,须要在主界面中显示用户的信息,此时用session来记住用户是最为合适只是了。功能实现例如以下&#xff…

[Android]解决android65K方法引用限制

解决方案如下: 1.Google官方的android.support.multidex.jar解决,将当前打成1个dex的方式,打成多个dex。 2.淘宝成熟的atlas解决方案,将主客一些功能全部本地化,减少主客Nativie的代码编译大小。(当前手淘正…

比较喜欢的前端ui框架

2019独角兽企业重金招聘Python工程师标准>>> 一、Ext JS 中文 http://extjs.org.cn/node/402 英文 http://www.sencha.com/products/extjs 二、BootStrap 中文网 http://www.bootcss.com/ 英文网 http://getbootstrap.com/ 转载于:https://my.oschina.net…

Citrix XenApp XenApp 6.5的安装

原文出处:http://vdi.so/blog/?p3933 环境要求:准备一台系统为windows server 2008 R2系统的计算机。准备好XenApp 6.5的安装光盘。注意:XenApp安装后需要授权文件激活,否则无法正常使用。部署步骤:首先,准…

CopyU!下一次更新将增加对设备厂商及型号的识别!

CopyU!下一版本的更新将加入对设备厂商及型号的识别功能,当用户连接设备时,CopyU!将能够辨别出设备的详细型号等,能够在一定程度上帮助用户发现问题设备或仿冒设备。 敬请期待即将到来的新更新!

hdu 5432 Pyramid Split 二分

Pyramid Split Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid629&pid1001Description 小明是城会玩,他有很多底面是正方形的黄金锥体,我们称之为金字塔,它由…