编码踩过的坑(宏)
来源:互联网 发布:linux教程xwindows 编辑:程序博客网 时间:2024/06/04 00:37
使用宏需要注意的地方
宏仅是在预编译时,将用户的定义机械的展开。因此很容易出问题。
建议定义宏的时候,可以自己将宏展开一下。或者根据Effective C++里的建议,使用inline取而代之。
要为宏的所有实参加小括号
#define DOUBLE(NUM) \ (NUM * 2)double num = 10.0;double dbnum1 = DOUBLE(num + 1); // 结果是12.0double dbnum2 = DOUBLE(1 + num); // 结果是21.0// 正确的定义应该是#define DOUBLE(NUM) \ ((NUM) * 2)// 或template<class T>inline T DOUBLE(T num){ return num * 2;}
使用宏时注意实参出现的次数
使用宏时,避免使用实参++或–的情况。如:
// 例子一#define IS_NUM(c) \ (((c) <= '9') && ((c) >= '0')) // 计划打印0,1...,9,实际却打印“2,4,6,8,:” unsigned char ascii = 0; printf("ascii nums are = "); while (ascii < 128) { if (IS_NUM(ascii++)) printf("%c,", ascii); }// 例子二,参考Effective C++#define FIND_MAX(a,b) \ ((a) > (b) ? (a) : (b)) // 参数不同,a在执行后的值也不同 int a = 5, b = 0; printf("%d\n", FIND_MAX(++a, b)); // 执行这句后,a已经等于7 a = 5; printf("%d\n", FIND_MAX(++a, b + 10));// 执行这句后,a却等于6
阅读全文
0 0
- 编码踩过的坑(宏)
- 编码踩过的坑(虚接口)
- 踩过的坑
- 踩过的坑
- 踩过的坑
- phonegap(3+)踩过的坑
- Elasticsearch踩过的坑(1)
- ambari 踩过的坑(转载)
- Django 踩过的坑(一)
- 用python2.7 做sogou字典处理编码的时候踩过的坑——学习笔记【文字编码转换 decode chardet】
- 编码gpu处理过的数据
- P12 (**) 解码游程编码过的列表
- 我踩过的听过的那些坑
- appium踩过的坑
- Phonegap踩过的坑
- Phonegap踩过的坑
- appium踩过的坑
- Kendo踩过的坑
- lightoj 1305 Area of a Parallelogram (几何数学)
- Gym 101142C CodeCoder vs TopForces【思维+Dfs】
- Java中的Comparable和Comparator
- QStyleSheet样式表学习
- 从零开始写Python爬虫 --- 1.9 爬虫实践:悦音台mv排行榜与反爬虫技术
- 编码踩过的坑(宏)
- matlab监控摄像头获取外界图像
- ZJOI2012网络 题解报告【LCT】
- 从零开始写Python爬虫 --- 2.1 Scrapy 爬虫框架的安装与基本介绍
- jojoi
- C++笔记——类的友元
- web单选按钮传值问题
- 数飞机 -LintCode
- 单链表的增添删改(C语言)