首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年09月19日 18:45

"##" 宏拼接

#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

From:https://www.cnblogs.com/xddisme/p/18421161
本文地址: http://shuzixingkong.net/article/2134
0评论
提交 加载更多评论
其他文章 k8s 中的 Ingress 简介【k8s 系列之三】
Ingress 的重要性不言而喻,它不仅统一了集群对外访问的入口,还提供了高级路由、七层负载均衡、SSL终止等关键功能,同时支持动态配置更新、灰度发布等高级特性。下文将进行详细介绍。
k8s 中的 Ingress 简介【k8s 系列之三】 k8s 中的 Ingress 简介【k8s 系列之三】 k8s 中的 Ingress 简介【k8s 系列之三】
从零开始掌握Kubernetes: Pod和Deployment的幕后故事
1. 引言 在如今的技术世界中,随着微服务架构的广泛应用和云原生理念的兴起,应用程序的开发、部署和管理发生了翻天覆地的变化。容器技术的出现使得开发者可以轻松地将应用及其所有依赖打包在一个轻量级、可移植的容器中,这种方式大大提升了应用的部署效率和一致性。然而,随着应用规模的扩大和微服务数量的增加,管理
OAuth2.0授权-gitee授权码模式
OAuth2.0授权验证-gitee授权码模式 本文主要介绍如何笔者自己是如何使用gitee提供的OAuth2.0协议完成授权验证并登录到自己的系统,完整模式如图 1、创建应用 打开gitee个人中心->第三方应用->创建应用 创建应用后在我的应用界面,查看已创建应用的Client ID
OAuth2.0授权-gitee授权码模式 OAuth2.0授权-gitee授权码模式
C#|.net core 基础 - 值传递 vs 引用传递
文章探讨了C#中值传递与引用传递的概念及其对值类型和引用类型变量的影响。值传递创建参数副本,不影响原变量;引用传递共享内存地址,方法内修改影响原变量。特别提到string视为值类型处理,C#中ref、out等修饰符可实现引用传递。
C#|.net core 基础 - 值传递 vs 引用传递 C#|.net core 基础 - 值传递 vs 引用传递 C#|.net core 基础 - 值传递 vs 引用传递
分享3款开源、免费的Avalonia UI控件库
Avalonia介绍 Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件,确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这意味着开发人员可以共享他们的UI代码
分享3款开源、免费的Avalonia UI控件库 分享3款开源、免费的Avalonia UI控件库 分享3款开源、免费的Avalonia UI控件库
主流流媒体的综合性能大 PK ( smart_rtmpd, srs, zlm, nginx rtmp )
简述 随着互联网的发展,音视频行业越来越火,自然而然的流媒体服务器也是百花齐放。市面上也有很多种类的流媒体服务器,让人眼花缭乱。特别是对技术了解不深的朋友,更不知道怎么选择。 其实作为服务器,主要考察的无外乎几个核心指标,只要符合,基本上都是属于比较优秀的流媒体服务器。我简略说一说这些核心特性: 稳
【原创】解决NasCab掉进程,NasCab进程维护
最近对象吐槽家里服务器又连不上,看不了考研视频了。 我掏出手机一试,确实连不上。家里的服务器是Win11平台,用NasCab管理的视频文件,然后通过frpc做的内网穿透。 我们在外面的图书馆,连不上无非是三种情况:服务器关机了、NasCab内网穿透插件掉了、NasCab进程掉了。 远程登录服务器,发
【原创】解决NasCab掉进程,NasCab进程维护
Windows 调试工具课程
本文是我在集团内部上的课程记录而成的博客内容。在本次课程里面将和大家介绍一些在 Windows 上常用的调试工具,以及调查问题的常见套路。适合于伙伴们入门 Windows 调试 本文以下内容是采用原本课程课件里面的一页页的内容组装而来,过程中补充一些讲课时的内容 本次课程里面核心的内容是调试工具,调
Windows 调试工具课程 Windows 调试工具课程 Windows 调试工具课程