当前位置: 首页 > news >正文

C语言中的“#”和“##”

目录

  • 开头
  • 1.什么是#?
  • 2.什么是##?
  • 3.###的实际应用
    • 输出变量的名字
    • 把两个符号连接成一个符号
    • 输出根据变量的表达式
    • ……
  • 下一篇博客要说的东西

开头

大家好,我叫这是我58。在今天,我们要学一下关于C语言中的###的一些知识。

1.什么是#?

#,是一个只能用于宏的符号,用来返回#后面的量的名字(可以是变量,可以是宏,枚举常量或者字面常量,表达式也是可以的,但定义宏的时候#的右变必须是宏的参数),是一个字符串,其中,如果某个宏是#A(这里的A为字面常量)这种形式的话,那么这个宏就会返回这个字面常量转换成的字符串,比如#A(这里的A11.4514),它返回的就是11.4514这个字符串,而又比如#A(这里的A为表达式1+2),它返回的是1+2这个字符串,并且还比如#A(这里的AHello, world!这个字符串),它返回的是"Hello, world!"两边都带有"的字符串,不是两边都没带"的字符串Hello, world!。这就是#,非常简单。

2.什么是##?

在这里插入图片描述
##,也是一个只能用于宏的符号,用来返回把两个符号连接成一个符号的值,其中,这个值的类型可以是浮点型,可以是整型,可以是结构体类型,甚至也可以是一个函数!总之就是什么东西都可以合成而已,并且,在某个宏里写##的时候,##的前面和后面必须有你写的符号,否则就会报错,因此,我们可以把没定义过的CSDN或者YK1BOY##合成出一个CSDNYK1BOY来,而这就是##,跟#一样非常简单。

3.###的实际应用

输出变量的名字

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PRINT(A) printf(#A"\n")
int main() {int i = 0;float f = 0.0f;unsigned int def = 0;PRINT(i);PRINT(f);PRINT(def);return 0;
}

把两个符号连接成一个符号

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define CAT(A, B) A##B
#define E 0
#define OF 67
#define DE(A) 1.2
#define D 666
#define E(A) 678
int main() {int i = 1;int ii = 7;int iii = 87887;printf("%d\n", CAT(i, ii));printf("%d\n", CAT(E, OF));printf("%f\n", CAT(D, E(A)));return 0;
}

输出根据变量的表达式

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define PRINT(A,FORMAT) printf(#A" = "FORMAT"\n", A)
int main() {int i = 11;float f = 4.5f;unsigned int def = 810;PRINT(i,"%d");PRINT(f,"%f");PRINT(def,"%u");return 0;
}

……

下一篇博客要说的东西

预处理指令的其中之一——#line

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 三维前缀和 C++
  • 【Centos】制作一键安装包.bin 文件
  • 【论文阅读】:Mamba YOLO SSMs-Based YOLO For Object Detection
  • 学懂C++(四十四):C++ 自定义内存管理的深入解析:内存池与自定义分配器
  • milvus使用milvus migration工具迁移数据
  • Kubernetes 上安装 Jenkins
  • 滑动窗口系列(定长滑动窗口长度)8/31
  • CRMEB商城系统功能解读——渠道码
  • Ant Design vue 多层for循环form表单自定义校验
  • css中的伪类
  • 打卡第58天------图论
  • Stable Diffusion 必备插件推荐,菜鸟轻松成高手!(附插件整合包)
  • 基于爬山法MPPT和PI的直驱式永磁同步风力发电机控制系统simulink建模与仿真
  • string的模拟实现与深浅拷贝
  • 嵌入式全栈开发学习笔记---Linux系统编程(进程间通信)
  • [笔记] php常见简单功能及函数
  • 0x05 Python数据分析,Anaconda八斩刀
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • angular2开源库收集
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • express + mock 让前后台并行开发
  • JavaScript实现分页效果
  • JavaScript中的对象个人分享
  • jQuery(一)
  • PHP面试之三:MySQL数据库
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 让你的分享飞起来——极光推出社会化分享组件
  • 小程序button引导用户授权
  • 异常机制详解
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #AngularJS#$sce.trustAsResourceUrl
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • $GOPATH/go.mod exists but should not goland
  • (1)无线电失控保护(二)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (C#)一个最简单的链表类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java入门)学生管理系统
  • (poj1.3.2)1791(构造法模拟)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (简单) HDU 2612 Find a way,BFS。
  • (三)c52学习之旅-点亮LED灯
  • (算法)N皇后问题
  • (五)c52学习之旅-静态数码管
  • (小白学Java)Java简介和基本配置
  • (一)Docker基本介绍
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***监测系统的构建(chkrootkit )
  • .FileZilla的使用和主动模式被动模式介绍