鍍金池/ 問答/C  C++/ C++中 預(yù)定義宏是否應(yīng)該由inline函數(shù)取代

C++中 預(yù)定義宏是否應(yīng)該由inline函數(shù)取代

在<Effective C++>中,有一個條款是這樣的:
現(xiàn)代的C++程序設(shè)計原則不推薦適用宏定義常量或函數(shù)宏,應(yīng)該盡量少的使用 #define ,如果可能,用 const 變量或 inline 函數(shù)代替。

但在Debug程序的時候需要一些預(yù)定義宏,如__DATE__,__FILE__,__LINE__,__FUNCTION__等。請問面對這種情況,是否應(yīng)該用inline來代替define呢。

如果需要 下面這種情況應(yīng)該如何替代呢。

#define log_err(M, ...) fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__)
回答
編輯回答
神經(jīng)質(zhì)

我認(rèn)為使用define的最大價值在于是否可以將大段的重復(fù)性代碼濃縮為define,后續(xù)使用可能用一個宏就解決大段的重復(fù)性代碼。比如mfc中的消息映射,成功的將很多重復(fù)性的代碼濃縮為一兩個宏,雖然mfc本身很復(fù)雜,但是它的宏定義的使用堪稱教科書。其他常用的使用場景比如定義不定長的函數(shù),你給出的這個例子就是。比如與操作系統(tǒng)和編譯環(huán)境有關(guān)的,比如__FILE__,__LINE__,DEBUG等。至于你講的可能的代替,我認(rèn)為是定義常量、定義簡單的函數(shù)等。

2017年10月21日 23:07
編輯回答
不歸路

樓上的意思對的,對于可以替換的宏定義,比如定義的宏常量,或者宏函數(shù),盡量用const 或者內(nèi)聯(lián)

2017年10月10日 13:14