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