码迷,mamicode.com
首页 > 编程语言 > 详细

C++——有关#define的讨论

时间:2020-02-18 09:16:57      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:改善   设计   effective   代码   return   编译   特性   替换   预处理   

结论:尽量不要使用#define


常见用法:

#define PI 3.14 //建议用const/enum替换
#define MAX(a, b) (a) > (b) ? (a) : (b) //建议用inline替换

改进:

const double pi = 3.14;
enum { pi = 3.14 };
inline int Max(const int& a, const int& b) {
    return a > b ? a : b;
}


使用#define可能引发的问题


#define预处理阶段处理;而const enum inline编译阶段处理

  1. 可能导致#define的内容没有进入记号表,编译器不会提示替换前的记号

    例如上述代码中,编译器报错只会提示3.14不会提示PI

  2. 可能导致#define的内容出现多份

    例如上述代码中,多个PI出现的地方,就会出现多个3.14

  3. #define无视作用域,只能#undef解除

    没有C++的封装特性


参考文献


[1] Effective C++ 改善程序与设计的55个具体做法

C++——有关#define的讨论

标签:改善   设计   effective   代码   return   编译   特性   替换   预处理   

原文地址:https://www.cnblogs.com/thatWangCheng/p/12324571.html

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