关于C++中的# ##

C/C++/中宏特殊字符的含义及用法总结(“#”、“##”、"#@"、“\”等等) 在C/C++中,宏定义是由define完成的,宏定义中有几种常见的特殊字符需要我们了解,常用的特殊字符有以下几种: #:在宏展开的时候会将#后面的参数替换成字符串; 字符串化 ##:将前后两个的单词拼接在一起; 连接化 #@:将值序列变为一个字符; 字符化 \:将两行连接起来。行连接化 我们可以使用这些特殊的字符做一些简单的测试例子: 1.# 测试 测试代码如下: #i... 阅读详情

使用注意

微软的编译器,要求预处理器指令的符号必须是不是空格的行的第一个字符.
#,##都是预处理器命令,所以不能随意在代码各个地方出现,比如,
cout<<#test<<endl
这样是不行的,会报“预处理器命令必须作为第一个非空白空间启动”

目前一般用法是通过define来使用这两个符号

#define STR(a)  #a
#define CONCAT(a,b)  a##b

先讲#

#这个预处理命令是将一个类型或变量或函数的名字转为字符串:

#define STR(a)  #a

void test_func_name()
{
}

class TestName
{
};
int main(int argc, char *argv[])
{
	int data_name = 100;
	printf("%s\n", STR(data_name));
    printf("%s\n", STR(TestName));
    printf("%s\n", g(test_func_name));
	return 0;
}

输出是:

data_name
TestName
test_func_name

再讲##

##这个预处理命令是将两部分拼接起来,形成一个代码块可见的变量或函数。

#define CONCAT(a)  #a

void test_func_name()
{
cout << "i am test_func_name" << endl;
}
int main(int argc, char *argv[])
{
	int data_name = 100;
	cout << f(data, _name) << endl;
    f(test_func_, name());
	return 0;
}

输出是:

100
i am test_func_name

CONCAT(a,b)在上面的代码中是不行的,因为上面的代码中没有出现ab这个变量或函数

C/C++ 宏中“##”与“#”的用法 是两个特殊的预处理操作符,用于在宏展开时对参数进行字符串化和符号连接。:将两个符号(Token)拼接为一个新的符号。:将宏参数转换为字符串常量(即添加双引号)。在 C/C++ 宏中,符号1 ## 符号2。 阅读详情

相关推荐

C++预处理命令#和##用法详解

通过将参数转换为字符串、将标识符连接成新的标识符等操作,可以极大地提高代码的可读性和可维护性,值得我们在平时的工作中认真学习和使用。然后我们定义了一个整数变量ab,并通过CONCAT将其名称连接为a+b,最终输出该变量的值和通过连接后的名称访问该变量的值。其中,#和##是预处理中的两个特殊符号,在宏替换中使用广泛。#操作符可以将其后面的宏参数转换为字符串常量,并将字符串常量与其前面的标识符连接起来。在上面的代码中,我们通过定义一个名为STR的宏并使用#操作符将其参数转换为字符串常量,然后输出该字符串常量。

CyberWarpX的博客 345

C++中的##、#符号含义

在C++中,## 和 # 是两个不同的预处理符号。这些符号都是在C++的预处理阶段使用的,用于在代码编译之前对文本进行操作。

记录值得记录的东西 5806

金仓数据库KCM认证考试介绍【2025年4月更新】

金仓数据库认证资深专家KCM认证考试介绍

qq709869231的博客 3231

C++ "#"的作用和用法

(1)#和##的作用和用法● C/C++ 的宏中,#的功能是将其后面的宏参数进行字符串化操作,简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。##连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。#include <iostream> using namespace std;#define WAR

TAOTAO 4676

康耐视VisionPro必学技巧:用CogCopyRegionTool实现图像拼接与局部替换

本文深入探讨了康耐视VisionPro中CogCopyRegionTool的高级应用,重点解析如何利用其精确的像素级复制与坐标对齐功能,实现工业视觉中的多相机图像拼接与印刷品局部替换。通过实战案例与代码示例,详细指导了从坐标标定、画布创建到顺序复制的完整流程,并分享了性能优化与常见避坑指南,帮助工程师高效解决复杂图像合成难题。

weixin_29204121的博客 500

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 543

C++中的#,##,和"

本文主页链接:C++中的#,##,和" 想要灵活应用宏,离不开#和##。 " 在学习#和##之前,先来看一个关于"的例子: [cpp] view plain copy #include    #include       int main()   {       const char* p1 = "Hell

chinabinlang的专栏 1万+

Mac和VScode配置fortran

macOS系统 vscode fortran gfortran 终端

weixin_43047707的博客 2410

C++中的#与##

内容简介#的作用##的作用注意点 #的作用 #用于将一个宏参数字符串化 // 代码一 #include <string> #include <iostream> #define test_jing(inner_str) #inner_str int main() { std::string str="sfjsljfas"; std::cout<<test_jing(str); return 0; } 可得到输出: 可见这里#只是无脑地将宏

一身骄傲小小裴 1300

手把手教你用Gazebo和VINS-MONO搞定VIO SLAM仿真(附Realsense D435i模型配置)

本文详细介绍了如何使用Gazebo和VINS-MONO构建VIO SLAM仿真环境,包括Realsense D435i模型的配置与集成。通过实战指南,帮助开发者快速搭建高保真仿真平台,优化VIO性能,并解决常见问题,适用于机器人感知与定位导航领域。

weixin_30682415的博客 159

【ESP32设备通信】-LoRa通信

在本文中,我们将使用 Arduino IDE 将 ESP32 与 LoRa SX1278 (Ra-02) 模块连接起来。 我们将创建一个真实的示例项目,通过 LoRa 无线打开/关闭 LED 进行演示。

视觉与物联智能 1890

C和C++中的##和#

一、C和C++中# C和C++中的#和宏一起使用,表示将#后面的内容转换为字符串 示例 #define TEST(n) #n int main(int argc, char const *argv[]) { cout<<TEST(9)<<endl; cout<<TEST(qwe)<<endl; return 0; } 上述代码中,当执行TEST(9)和TEST(qwe)时,会将其分别替换为#9和#qwe,进而将#9和#qwe转换为"

Master Cui的博客 1118

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1451

关于C++中的#和##的作用

#的作用 #的作用就是拼接成一个字符串,一个死的字符串,就相当于给这个字符加上了两个引号 #define FUNC(str) #str FUNC(a);//这就是输出一个字符串a,其实就是“a” ##也是拼接字符串,但是这个拼成的是一个变量(任何类型都可以,string,int等等),不是一个死的字符串了 我这么举一个例子,就用string举例子 string str=“aaaaa”; 一个#,拼成的就相当于“aaaaa”,两个#,相当于str。 所以说用##的时候,他是一个变量,你得提前定

Zoffan的博客 2387

10、皮肤 - 神经记录实验全流程解析

本博客详细介绍了皮肤-神经记录实验的全流程,涵盖实验所需的材料准备和具体操作方法。内容包括细胞外记录设备的设置、合成间质液(SIF)的制备与调节、小鼠后爪皮肤和胫神经的手术解剖步骤、清洁解剖后的记录准备、纤维分离与感受野识别方法,以及神经纤维机械响应的测量。该实验为研究神经纤维的活动与功能提供了重要的技术支持,适用于神经科学研究领域。

backprop5master的博客 186

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++宏定义中的 # 和 ## 指令

1) #:构串操作符 #是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串。 构串操作符#只能修饰带参数的宏的形参,它将实参的字符序列(而不是实参代表的值)转换成字符串常量。 #define WARN_IF(EXP) \        { if (EXP)  fprintf(stderr, "Warning: " #EXP " found.\n");} //测试例子 ...

zdleek的专栏 737

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++中的 # 和 ##

#:构串操作符 构串操作符 # 只能修饰带参数的宏的形参,它将实参的字符序列(而不是实参代表的值)转化为字符串常量 执行以下代码 #include <stdio.h> #define STRING(s) #s #define TEXT(s) "class"#s"info" int main() { int integer = 999; printf(STRING(integer)"\n"); printf(TEXT(integer)"\n"); return 0; } 输出结果

柚子树's Blog 5916

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++: #define中的三个特殊符号:#,##,#@

#define中的三个特殊符号:#,##,#@   看下面三个define宏定义: #define Conn(x,y) x##y #define ToChar(x) #@x #define ToString(x) #x 一、x##y 表示x连接y,如: int n = Conn(123,456); //n=123456; char* str = Conn("asdf", "add") //str = "asdfadf"; 二、#@x 给x加上单引号,结果返回

Taopper的博客 1009

c/c++ 中的# #@ 和##

c/c++的预处理定义: 一、Stringizing Operator (#) 在c和c++中数字标志符#被赋予了新的意义,即字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来 参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参

726

【C/C++】宏定义中的#和##

【C/C++】宏定义中的#和## | 单井号 双井号

Juruo@Security 965

C/C++宏定义中的#和##

 #,## 1、在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。(原文:When you put a # before an argument in a preprocessor macro, the preprocessor turns that argument into a character array. This, combined w

姜的理想国 1095
上一篇: Sundial的c++例子
下一篇: SUNDIALS例子的命名规则
Feisy
博客等级 码龄19年 166粉丝 235原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值