c++ "#"代表什么意思
#defineCS_OPENING(i)(P_2D_SPABOP##i)P_2D_SPABOP是个宏,请问它后面跟的2个#号代表什么意思?...
#define CS_OPENING(i) (P_2D_SPABOP##i)
P_2D_SPABOP是个宏,请问它后面跟的2个#号代表什么意思? 展开
P_2D_SPABOP是个宏,请问它后面跟的2个#号代表什么意思? 展开
4个回答
展开全部
## 连接符与# 符
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
展开全部
预处理是以“#”为开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后面是指令的关键字。在关键字和#号之间允许存在任意个数空白字符。 整行语句构成一条预处理指令。该指令将在编译器进行编译之前对源代码做某些转换。
# 空指令。没有任何效果。
#include 在该指令的位置包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
# 空指令。没有任何效果。
#include 在该指令的位置包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没记错的话是连接操作符,就是把P_2D_SPABOP和i的值连接起来,比如i=3,那么CS_OPENING(i) 就为P_2D_SPABOP3
CS_OPENING(BB)就为P_2D_SPABOPBB
CS_OPENING(BB)就为P_2D_SPABOPBB
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询