C/C++中单井号与双井号的使用
来源:百度文库 编辑:神马文学网 时间:2024/04/30 14:40:51
单井号(#)
把传递过来的参数当成字符串进行替代
如下示例:
程序代码#define display(name) printf(""#name"")
int main() {
display(name);
}
输出:
name
双井号(##)
称为连接符
在带参数的宏定义中将两个子串(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
把传递过来的参数当成字符串进行替代
如下示例:
程序代码#define display(name) printf(""#name"")
int main() {
display(name);
}
输出:
name
双井号(##)
称为连接符
在带参数的宏定义中将两个子串(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
C/C++中单井号与双井号的使用
c 类的多态与虚函数的使用
C++Builder IDE使用技巧与快捷键
使用C编译器产生清晰的二进制文件
Linux 内核使用的 GNU C 扩展
C# paramas ref out的使用
合理使用维生素C
c 类的多态与虚函数的使用-程序设计
入手HTC 6950使用感受,并与i908的对比 - HTC6950Diamond(C)玩...
va_list、va_start、va_arg、va_end的原理与使用 - 浪迹天涯 - C 博客
在 console mode 中使用 C/C 编译器 - Kevin的专栏 - CSDNBlog
如何在autotools中使用其它动态库的方法 - C/C - ChinaUnix.net
c语言static与extern的用法
C/S与B/S的区别
与人相处的黄金法则c
C语言之内存使用
C 语言之一 内存使用
1合理使用维生素C
CAD使用技巧大全c
aps-c 与全副
C Java PHP Perl Python的程序代码美化工具使用
内存对齐与ANSI C中struct型数据的内存布局(转贴) - C&C - 中国代码...
如何混合使用C和C (上)
如何混合使用C和C (下)