码迷,mamicode.com
首页 > 其他好文 > 详细

宏定义

时间:2014-07-12 13:10:01      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:style   使用   strong   io   代码   ar   

#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。(中间可以有空格或Tab?)

假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#在字符串中使用时,需要用双引号引起来,否则会当成普通的字符串进行处理。

##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。

##这个连接符号充当的作用就是当__VAR_ARGS__为空的时候,消除前面的那个逗号。

 另外,如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开 。

宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错.

##运算符可以用于类函数宏的替换部分。另外,##还可以用于类对象宏的替换部分。这个运算符把两个语言符号组合成单个语言符号。

函数式宏定义和真正的函数调用有什么不同: 
1、函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。 
2、调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。

C标准库的很多函数都提供两种实现,一种是真正的函数实现,一种是宏定义实现。

宏定义,布布扣,bubuko.com

宏定义

标签:style   使用   strong   io   代码   ar   

原文地址:http://www.cnblogs.com/yanggongfu/p/3832626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!