Daily-C-Study(21):C语言#和##运算符
来源:互联网 发布:camera raw mac版本 编辑:程序博客网 时间:2024/05/29 16:01
Daily-C-Study(21):C语言#和##运算符
成于坚持,败于止步
#也是预处理?是的,你可以这么认为。那怎么用它呢? 别急,先看下面例子:
#define SQR(x) printf("The square of x is %d.\n", ((x)*(x)));
如果这样使用宏:
SQR(8);
则输出为:
The square of x is 64.
注意到没有,引号中的字符x 被当作普通文本来处理,而不是被当作一个可以被替换的语言符号。
假如你确实希望在字符串中包含宏参数,那我们就可以使用“#”,它可以把语言符号转化为字符串。上面的例子改一改:
#define SQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)));再使用:
SQR(8);
则输出的是:
The square of 8 is 64.
很简单吧?相信你现在已经明白#号的使用方法了。
#的作用是实现文本替换,同样例如
#define HI(x)
#define HI(x)printf("Hi,"#x"\n");void main(){HI(John);}
程序的运行结果:Hi,John
在预编译处理的时候,"#x"的作用是将x替换为所代表的字符序列。在本程序中x为John,所以构建新串“Hi,John”。
和#运算符一样,##运算符可以用于宏函数的替换部分。这个运算符把两个语言符号组合成单个语言符号。看例子:
#define CONNECT(X,Y) X##Yvoid main(){int a1,a2,a3;CONNECT(a,1)=0;CONNECT(a,2)=12;a3=4;printf("a1=%d\ta2=%d\ta3=%d",a1,a2,a3);}
则会有以下执行结果:
a1=0 a2=12 a3=4
看明白了没?##就是个粘合剂,将前后两部分粘合起来。就先到这里,O(∩_∩)O~
我的专栏地址:http://blog.csdn.net/column/details/c-daily-study.html
待续。。。。。。
- Daily-C-Study(21):C语言#和##运算符
- Daily-C-Study(22):C语言指针
- Daily-C-Study(1):C语言typedef关键字
- Daily-C-Study(2):C语言enum关键字
- Daily-C-Study(3):C语言union关键字
- Daily-C-Study(4):C语言struct关键字
- Daily-C-Study(5):C语言extern关键字
- Daily-C-Study(6):C语言volatile关键字
- Daily-C-Study(7):C语言const关键字
- Daily-C-Study(8):C语言return关键字
- Daily-C-Study(9):C语言void关键字
- Daily-C-Study(10):C语言关键字有哪些
- Daily-C-Study(11):C语言register关键字
- Daily-C-Study(14):C语言sizeof关键字
- Daily-C-Study(13):c语言变量及命名
- Daily-C-Study(15):C语言宏定义#define
- Daily-C-Study(16):C语言条件编译#ifdef
- Daily-C-Study(17):C语言文件包含#include
- 设计模式-装饰模式
- 使用eclipse中自带的tomcat找不到发布的应用路径
- 第十章 名称解析
- 格式工厂—视频剪辑
- Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home
- Daily-C-Study(21):C语言#和##运算符
- Linux内核--内核地址空间分布和进程地址空间
- 设计模式之 再说单例模式
- Android中对数据库进行CRUD操作手写SQL语句方式
- Android ProgressBar 自定义样式(七),仿真QQ聊天、网易新闻客户端加载图片Loading
- 《不要悲哀,也不要埋怨》
- windows环境变量
- RobotFrameWork(六)控制流之For循环
- 网络科学(复杂网络)领域的大牛和研究机构总结 (第三次修改)