首页 > 其他分享 >c语言 宏的一些深层应用(##,#,宏函数)

c语言 宏的一些深层应用(##,#,宏函数)

时间:2024-09-19 19:46:00浏览次数:10  
标签:CONCATENATE 函数 ## STR 拼接 深层 student define

"##" 宏拼接

#define CONCATENATE(a, b) a ## b
CONCATENATE(student_, 1)		// 将a和b拼接起来变成一个新的变量 -> student_1
#define CONS(a,b)  int(a##e##b)
CONS(2,3)				//将aeb拼接起来 -> 2e3 == 2000

"#" 转换为字符串

#define CONCATENATE(a, b) a ## b
#define STR(s)     #s
STR(CONCATENATE(student_, 1))// 将a和b拼接起来变成一个新的变量 -> student_1 再转换为字符串 -> "student_1"

哈哈,你觉得上面注释说的是对的吗?nonono,我在编译器尝试用printf("%s", STR(CONCATENATE(student_, 1)));输出了一下,输出是CONCATENATE(student_, 1)。这个优先级问题本文就先不讨论啦,有兴趣的朋友可以自己去看看优先级的问题。
那如果我就是要输出student_1怎么办呢?起始很简单看我下面操作!

#define CONCATENATE(a, b) a ## b
#define _STR(s)     #s
#define STR(s)     _STR(s) 

这时候编译器的输出就是我们期望的student_1了。至于原理,咱也不敢问,但是知道有这个用法就行了。

宏函数

//    #define 宏名称( [形参列表] )  替换文本
#define DOUBLE(x) (x+x)	
#define MAX(a,b) ((a)>(b)?(a):(b))

更多内容请参考以下文章:
https://blog.csdn.net/m0_62918577/article/details/127361768
https://www.cnblogs.com/hnrainll/archive/2012/08/15/2640558.html
https://blog.csdn.net/weixin_46187354/article/details/133611969

标签:CONCATENATE,函数,##,STR,拼接,深层,student,define
From: https://www.cnblogs.com/xddisme/p/18421161

相关文章

  • java的二维数组
    二维数组的初始化 二维数组的进行for循环时的判断条件怎么确定的呢?  因为在二维数组是特殊的一维数组,c语言中二维数组首元素的代表的是地址,而首元素代表的是一组一维数组,计算首元素的长度也就是计算二维数组的行下标为0的一维数组的长度所以判断数组名的长度也就是判断......
  • 想做数据报表?你的“后台”够硬吗
    在数据驱动的时代,制作一份高效、精准的数据报表成为企业管理和决策的重要手段。但要做好数据报表,不仅需要一款功能强大的报表工具,还必须有一个强有力的“后台”管理系统来支撑。那么,为什么报表工具需要一个管理后台?以及管理后台的核心功能有哪些?今天就带大家一探究竟。报表工具......
  • QEMU 创建虚拟环境
    软件准备QEMU软件的下载地址:qemu-w64-setup-20210505.exeUEFI(BIOS的替代方案)的下载地址QEMU_EFI.fd系统镜像下载地址:openEuler-20.03-LTS-SP3-aarch64-dvd.iso创建虚拟环境创建虚拟机qemu-imgcreate-fqcow2E:\QEMU\OpenEuler_169.qcow250G安装虚拟机qemu-system......
  • [CQOI2007] 涂色
    [CQOI2007]涂色题意给出一个字符串,每个位置有一种颜色。有一个初始无颜色的字符串,每次可以把一段字符染成同一种颜色。求最少染多少次色,能把两个字符串变成一样。思路区间动态规划。定义\(dp_{i,j}\)表示把\([l,r]\)这段区间染成一样需要的最小次数。发现染色有两种......
  • centos789手动无脑用sh脚本安装Java8
    #老师给的文件是jdk1.8版本,所以我这边写的也是1.8的脚本输入命令:mkdir–p/export/data#放置相关的数据文件输入命令mkdir–p/export/servers#软件的安装目录输入命令:mkdir–p/export/software上传文件jdk-8u241-linux-x64.tar.gz到/export/software目录然后写一个安......
  • GitHub 加速
    之前访问GitHub都是挂梯子,但是最近要租卡训练神经网络模型,卡很贵不可能一直租,如果每次开新卡都重新装梯子的话很麻烦。于是需要一些能够镜像GitHub的方法。使用GitClone使用GitClone的方法很简单,只需将gitclone.com/插入到要克隆的链接即可。将:gitclonehttps://git......
  • Windows 下 EGL PBuffer 测试代码
    Windows 上使用glad加载浏览器的LibEGL.dll 和LibGLESV2.dll,测试 EGL 在Windows 上的实现,代码:1#include<stdio.h>23#include"include/glad/egl.h"4#include"include/glad/gles3.2.h"56#defineSTB_IMAGE_WRITE_IMPLEMENTATION......
  • 星塔链startowerchain处理过剩算力资源的创新策略
     RIP机制的核心作用:RIP(资源交互证明)机制是星塔链的基石,它创新地将智能设备的算力、存储和网络资源纳入区块链的共识过程中。这不仅极大地扩展了区块链网络的资源池,还使得原本可能闲置的过剩算力得以有效利用。智能设备节点的灵活参与:通过将智能设备转变为区块链节点,星塔链......
  • 企业号码认证是什么?如何申请?
    随着通讯环境愈发复杂,各种推销、骚扰电话层出不穷,用户对于陌生来电的警惕性日益提高。在这种背景下,企业每次电话联系客户时,经常会遇到电话被拒接或不接的情况。为了应对这个问题,许多企业选择了申请号码认证,试图通过认证号码显示公司名称的方式去重塑客户信任和提高电话接听率。......
  • day7
    归并排序概述:归并排序是一种基于分治法的排序算法。它将数组分成两个子数组,递归地对这两个子数组进行排序,然后将两个已排序的子数组合并成一个有序的数组。步骤:将待排序的数组分成两半。递归地对这两个子数组进行排序。合并两个已排序的子数组以形成一个有序的数组。时间......