2011-04-12 30 views

回答

4

我會說宏不如內聯函數。

內聯函數是類型安全的,宏不是。這是他們的巨大優勢。編譯器正在幫助您製作更好的代碼。

這樣說,有一些宏可以做的功能不能。雖然這些東西並不多...

我相信C程序員已經習慣了宏並且只是將他們的習慣延續到C++中。

+0

所以,基本上它是一個更好的習慣,作爲一個C++程序員使用內聯而不是宏? – snoofkin 2011-04-12 12:57:25

+2

是的,使用你的內聯函數。 – Starkey 2011-04-12 12:58:21

+0

有關可以使用宏執行某些操作的示例,但無法使用內聯函數執行操作,請參閱:http://stackoverflow.com/questions/4790515/advantage-of-macro-over-in-line-in- C/4790610#4790610 – 2011-04-12 13:42:11

0

的唯一的事情,我可以想像依然採用宏之一是爲LINEFILE宏被納入採伐聲明

例如:

#DEFINE TRACE(S) vGenericLogStatement(__FILE__,__LINE__, s) 

哪裏vGenericLogStatement的定義類似於:

void vGenericLogStatement(char* fileName, int line, char* traceMesg); 

它們也是有用的快速和髒字符串連接。

0

我不會說他們是劣等的。在C++中,使用宏可以做的事情並不多,你無法通過內聯函數或模板獲得相同的效果。我唯一能想到的就是'#'字符串宏操作符,如果Boost也有辦法做到這一點,我不會感到驚訝。

但是,當涉及到常量時,宏可能有一個優點 - 它們通常不會佔用任何數據空間,而是直接寫入指令流。在內存佔用少的系統上,這可能是一個主要考慮因素。