连接符##

C语言连接符--## 是一个连接符(concatenation operator),也被称为“粘贴”或“尖括号-井号”运算符。它主要在宏定义和条件编译中使用,用于连接两个标记(tokens)。运算符只能连接标记,而不能连接字符串字面量或其他非标记实体。在C语言的预处理器(preprocessor)中,时要小心,确保在宏展开后不会产生无效的C代码。会“吃掉”它后面的标记(在这种情况下是。会被扩展为空,因此会正常定义。),从而不定义该变量。在上述第二个例子中,如果。 阅读详情

经常使用_T()宏,它是怎么来的?用VA看了一下,原来_T是__T

#define _T(x)       __T(x)

再看看__T

在tchar.h中

#ifdef  _UNICODE

#define __T(x)      L ## x

#else

#define __T(x)      x

#endif

 

那么,这个##是什么呢?原来它是一个连接符,将##左右两边的表达式连接成一个.比如,在_UNICODE环境下,

_T(“Unicode“) == L“Unicode“

 

不过需要注意的是,宏是由编译器在编译阶段识别的,所以不能指望程序运行时起到连接作用.比如:

int A0, A1, A2, A3;

for (int i = 0; i < 4; i++)

{

 A##i = i;

}

这种代码就无法编译了.

C语言中的##连接符与#符 符号可以将宏参数转换为字符串常量,使得在宏定义中将参数的值转换为字符串成为可能。通过灵活运用这两个符号,我们可以编写更加通用和灵活的宏定义,提高代码的可读性和可维护性。C语言中的##连接符和#符号是预处理器中的两个特殊符号,它们在宏定义中起到了重要的作用。通过使用#符号,我们可以在宏定义中将参数的值转换为字符串常量,这在某些情况下非常有用,比如在日志输出或者错误处理中。可以看到,通过使用##连接符,我们可以在宏定义中动态地生成变量名或者其他标识符,从而增加了宏的灵活性和通用性。 阅读详情

相关推荐

C语言#和##连接符在项目中的应用(漂亮)

之前看见ST官方一个老外的风格,看完之后大赞。 看看他是怎么写的: #ifndef RINGBUFF_HDR_H #define RINGBUFF_HDR_H #ifdef __cplusplus extern "C" { #endif #include <string.h> #include <stdint.h> /** * \defgroup RI...

Bruce.yang的嵌入式之旅 1826

C/C++宏连接符'##'和'#'的用法

C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。 关 于#和## 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏 变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #define WARN_IF(EXP) \

u010944926的专栏 6219

从工创赛实战到开源:一个高鲁棒性智能物流视觉系统的构建与优化

本文分享了从工创赛实战中构建高鲁棒性智能物流视觉系统的完整经验。针对赛场复杂光线环境,详细阐述了摄像头选型、基于CLAHE和形态学梯度的抗干扰色环识别算法、卡尔曼滤波状态估计以及多线程串口通讯与任务调度等核心优化策略,旨在打造一个稳定可靠的视觉系统,并已将相关代码开源。

weixin_29046035的博客 316

C语言宏中“#”和“##”的用法

对于这两个语法的功能都比较简单,且都是在预处理阶段做一些工作 : #主要是将宏参数转化为字符串 ##主要是将两个标识符拼接成一个标识符

诊断协议那些事儿's blog 4712

Cocos2d-x手游逆向实战:Frida高阶Hook与动态解密技术

Cocos2d-x作为主流跨平台游戏引擎,其混合架构(C++核心+JNI桥接+Lua/JS脚本)和强加固策略(符号剥离、anti-frida、so加壳)使传统逆向方法失效。本文围绕‘无符号定位’‘C++函数硬编码地址识别’‘Lua层AST级劫持’‘OpenGL内存回溯解密’四大关键技术展开,深入解析如何在真实上线项目中稳定hook被strip的libcocos2d.so关键函数、绕过反调试心跳检测、从glTexImage2D参数逆向追踪明文资源,并结合熵值扫描实现零先验知识的内存明文发现。面向已掌握Frid

weixin_30345577的博客 672

企业网络架构设计:从内网到外网的无缝通信方案

本文详细解析了企业网络架构设计中的关键技术与实践方案,重点介绍了VLAN划分、OSPF路由优化、安全策略及无线网络集成等核心内容。通过OSPF多区域部署和链路聚合技术,实现内网到外网的无缝通信,提升企业网络性能与安全性。文章还提供了具体的配置示例和最佳实践,助力企业构建高效可靠的网络架构。

weixin_28331555的博客 623

6.3、宏参数的字符串化(#)和连接(##)

在宏定义中有时还会用到#和##两个符号,它们能够对宏参数进行操作。

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 549

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1866

define的一些骚操作:##操作连接符、#@字符化操作符、#字符串化操作符、\行继续操作

*使用*//*使用字符串化操作符,将ITEM字符串化*//*使用define定义以简化枚举*/STATUS(KS_RELEASE) /*稳定松开状态*/ \STATUS(KS_PRESS_SHAKE) /*按下抖动状态*/ \STATUS(KS_PRESS) /*稳定按下状态*/ \STATUS(KS_RELEASE_SHAKE) /*松开抖动状态*/ \STATUS(KS_NUM) /*状态总数(无效状态)*/ \/*由于上面使用了define,此处枚举得以简化*//*

pl0020的博客 2543

bartender 10.1破解版|bartender条码打印10.1

点击下载出处:BarTender10.1破解版 bartender10.1破解版是一款专业的条码打印软件,在行业内广受好评,通过使用bartender我们可以将标签设计这个复杂的过程变得更简便,在设计中快速调整,即刻打印,非常迅速,BarTender10.1破解版不仅支持的标签类型包括EPC Class 1 、Gen2 、ISO 18000-6b 、ISO 15693 、Tag-It 、I-CO...

weixin_44924147的博客 6万+

多智能体强化学习之值函数分解:VDN、QMIX、QTRAN系列优缺点分析(转载)

关于多智能体强化学习中VDN,QMIX,QTRAN三个算法再值分解方向的研究成果。三个算法呈递进关系

qq_33328642的博客 5858

C语言连接符号##和#解析

宏定义中的## 连接符与# 符 ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一

YUAN1125的专栏 6833

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析

本项目是基于携程网中关于大唐不夜城评论的文本分析,项目中用到了Python爬虫、词频分析、词云图分析、kmeans聚类、LDA主题分析、情感分析、社会网络语义分析等。本次实验我们使用了爬虫、词云图、情感分析、LDA主题分析、TF-IDF+Kmeans、社会网络语义分析等对大唐不夜城的评论进行了分析。关于博文中的源码大家可以关注派森小木屋公众号进入粉丝群领取,如对文章有疑惑,请评论区留言。

m0_64336780的博客 1万+

#define中##连接符、#符以及#@符的使用

      在C或者C++中define宏使用得很多,它的基本用法书上以及网上介绍的文章很多,这里我就介绍一下define宏中的几个常用符号的用法,##连接符、#符以及#@符。      我们定义:     #define A(x) T_##x     #define B(x) #@x     #define C(x) #x     我们假设:x=1,则有:     A(1)--

WangMark的专栏 5543

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c++/c中的##连接符的使用

在c/c++语言中,我们可以使用##来对一些字符进行连接,方便使用,尤其是在宏定义中使用该符号,可以省下很多工夫,详细的例子如下所示: #define GetSVN_Version(Type) GetSVN##Type##Version void GetSVNClientVersion(int iValue) void GetSVNPoolVersion(int iValue) ...

songlipeng的专栏 3620

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++/C宏定义中## 连接符与# 符的含义

C++/C宏定义中## 连接符与# 符的含义

danshiming的博客 1150

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C语言宏定义##连接符和#符的使用

## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。 简单的说,“##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。其中,分隔的作用类似于空格。我们知道在普通的宏定义中,预处理器一般把空格解释成分段标志,对于每一段...

EE漫谈 9700

c语言宏定义中##连接符和#的使用

C中如何使用宏属于编译器预处理的范畴,属于编译期概念。 .宏定义中字符串化操作符#: #的功能是将其后面的宏参数进行字符串化操作,意思就是对它所应用的宏变量通过替换后在其左右各加上一个双引号。 例如: #define WARN_IF(EXPR)\ do {\ if (EXPR)\ fprintf(stderr, "Warning: " #EXPR "\n");\

HAN Kai 1404

c语言宏定义的连接符##和#转字符串

<br />转自: http://cww0403.bokee.com/6889144.html<br /><br />(一)宏定义中的## 连接符与# 符 <br />## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作

hwizhao的专栏 835
上一篇: CreateProcess创建的子进程的命令行参数
下一篇: UNICODE还是_UNICODE
ForNormandy
博客等级 码龄22年 7粉丝 18原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值