C++中 预定义宏是否应该由inline函数取代

在<Effective C++>中,有一个条款是这样的:
现代的C++程序设计原则不推荐适用宏定义常量或函数宏,应该尽量少的使用 #define ,如果可能,用 const 变量或 inline 函数代替。

但在Debug程序的时候需要一些预定义宏,如__DATE__,__FILE__,__LINE__,__FUNCTION__等。请问面对这种情况,是否应该用inline来代替define呢。

如果需要 下面这种情况应该如何替代呢。

#define log_err(M, ...) fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__)
阅读 3.9k
3 个回答

我认为使用define的最大价值在于是否可以将大段的重复性代码浓缩为define,后续使用可能用一个宏就解决大段的重复性代码。比如mfc中的消息映射,成功的将很多重复性的代码浓缩为一两个宏,虽然mfc本身很复杂,但是它的宏定义的使用堪称教科书。其他常用的使用场景比如定义不定长的函数,你给出的这个例子就是。比如与操作系统和编译环境有关的,比如__FILE__,__LINE__,DEBUG等。至于你讲的可能的代替,我认为是定义常量、定义简单的函数等。

楼上的意思对的,对于可以替换的宏定义,比如定义的宏常量,或者宏函数,尽量用const 或者内联

有时候宏有特殊用途。

#define _STD_BEGIN namespace std {
#define _STD_END }
/*Adapted from HttpParser*/
#define XX(meth, str) \
case (char == HTTP_##meth): \
    http_parser->method = HTTP_##meth;

...
#undef XX

这就无法用inline替换了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题