一、宏的作用
在 C/C++中,宏的作用主要在于字符串替换。
二、宏的使用方法
1、简单宏定义
无参宏的宏名后不带参数
其定义的一般形式为:
define 标识符 字符串
示例
// 不带参数的宏定义
define MAX 10
注意:不要在宏定义中放置任何额外的符号,比如”=”或者尾部加”;”使用define来为常量命名一些优点:
- 程序会更易读。一个认真选择的名字可以帮助读者理解常量的意义;
- 程序会更易于修改。我们仅需要改变一个宏定义,就可以改变整个程序中出现的所有该常量的值;
- 可以帮助避免前后不一致或键盘输入错误;
- 控制条件编译;
- 可以对C语法做小的修改;
2、带参数的宏
带参数的仍要遵循上述规则,区别只是宏名后面紧跟的圆括号中放置了参数,就像真正的函数那样。
使用方法:
define <宏名>(<参数列表>) <宏体>
注意参数列表中的参数必须是有效的c标识符,同时以,分隔算符优先级问题:使用示例:
define COUNT(M) M*M
int x=5;
print(COUNT(x+1));
print(COUNT(++X));
//结果输出:11 和42 而不是函数的输出36
注意:
- 预编译器只是进行简单的文本替换,COUNT(x+1)被替换成COUNT(x+1x+1),5+15+1=11,而不是36
- CUNT(++x)被替换成++x*++x即为6*7=42,而不是想要的6*6=36,连续前置自加加两次
解决办法:
- 用括号将整个替换文本及每个参数用括号括起来print(COUNT((x+1));
- 即便是加上括号也不能解决第二种情况,所以解决办法是尽量不使用++,-等符号;
三、多行的宏
宏定义中允许包含两行以上命令的情形,此时必须在最右边加上\且该行\后不能再有任何字符,连注释部分都不能有,下面的每行最后的一定要是\,\后面加一个空格都会报错,更不能跟注释。
include
include
include
using namespace std;
define CHARTOSTRING(val,str)\
{\
stringstream sst;\
sst << val;\
str = sst.str();\
}
int main(void)
{
char val = a;
string str;
CHARTOSTRING(val,str);
cout << str << endl;
return 0;
}
str就是”a”。就是将字符a转为字符串a。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
© 版权声明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!邮箱:cxysz1@tom.com
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
THE END
暂无评论内容