C,C++ 宏中#与##的讲解
来源:互联网 发布:少年大学生 知乎 编辑:程序博客网 时间:2024/06/15 09:04
原文地址:http://www.cnblogs.com/morewindows/archive/2011/08/18/2144112.html
宏中的
# 的功能: 是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。
#@ :是加单引号(Charizing Operator)
## : 拼接符号(Token-pasting operator)。其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串 (token)就是指编译器能够识别的最小语法单元。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。
例子:
如定义好#define STRING(x) #x之后,下面二条语句就等价。
char *pChar = "hello";
char *pChar = STRING(hello);
还有一个
#define makechar(x) #@x
char ch = makechar(b);与char ch = 'b';等价。
注意: 宏中遇到#或##时就不会再展开宏中嵌套的宏了。什么意思了?比如使用char *pChar =STRING(__FILE__);虽然__FILE__本身也是一个宏,但编译器不会展开它,所以pChar将指向"__FILE__"而不是你要想的形如"D:\XXX.cpp"的源文件名称。因此要加一个中间转换宏,先将__FILE__解析成"D:\XXX.cpp"字符串。
定义如下所示二个宏:
#define _STRING(x) #x
#define STRING(x) _STRING(x)
再调用下面语句将输出带""的源文件路径
char* pChar = STRING(__FILE__);
printf("%s %s\n", pChar, __FILE__);
可以比较下STRING(__FILE__)与__FILE__的不同,前将带双引号,后一个没有双引号。
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解(++)
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- C,C++宏中#与##的讲解
- android 网络加载图片并保存本地,压缩,jpeg png格式分析
- 数据结构学习笔记(九)跳表、字典的跳表描述
- shell脚本
- VB.Net语言 复制、删除文件
- Bit Manipulation - C语言中二进制操作
- C,C++ 宏中#与##的讲解
- extern用法 C和C++混编
- 7月小结
- 块-block(语法部分)
- Socket的3次握手链接与4次断开握手
- 解决火狐中event对象无法识别
- C# MVC 枚举转 SelectListItem
- Android ViewPager和Fragment实现顶部导航界面滑动效果、标签下的tab位置
- 重返CSDN