C/C++中#和##的含义
来源:互联网 发布:疯狂阅读软件 编辑:程序博客网 时间:2024/06/06 00:16
在宏定义中经常会用到#和##
单井号(#)
把传递过来的参数当成字符串进行替代
如下示例:
输出:
name
双井号(##)
称为连接符
在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在参考编译原理。
下面是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
单井号(#)
把传递过来的参数当成字符串进行替代
如下示例:
程序代码
#define display(name) printf(""#name"")
int main() {
display(name);
}
int main() {
display(name);
}
输出:
name
双井号(##)
称为连接符
在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在参考编译原理。
下面是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
程序代码
#define paster( n ) printf( "token" #n " = %d", token##n )
//同时又定义了一个整形变量:
int token9 = 9;
//同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
- C/C++中#和##的含义
- C宏定义中## 和# 的含义
- C语言中%*的含义和用法
- C++/C 宏定义(define)中#和## 的含义
- c中static的含义
- C/C++中%的含义
- C/C++: C++ 中 const_cast 的含义
- C语言中__FILE__ 和__LINE__ 等宏的含义
- Object C语法中const、extern和static的含义
- C语言中static的含义和用法
- C语言中->含义
- C和C++函数的相互引用----C++中extern “C”含义深层探索[转载]
- C和C++函数的相互引用----C++中extern “C”含义深层探索[转载]
- 编程基础------C和C++函数的相互引用----C++中extern “C”含义
- C/C++中数组名的含义
- C/C++中数组名的含义
- C/C++中函数指针的含义
- C/C++中 const的不同含义
- oracle session会话
- VI修改文本文件命令
- 最常见面试题(SSH方面)《二》
- Java动态调用方法
- J2EE常见面试题分享(夕水溪下版)
- C/C++中#和##的含义
- Linux下安装CVS服务器
- jstring, String, char* 变换函数
- Java写入Excel文件
- java.lang.classcastexception:android.widget.TextView错误
- hibernate-cfx.xml配制文件详解
- BITMAP的定义
- shell编程资料集合
- uva-10152 - ShellSort