關于宏
關于 c 宏:
1.? 預編譯器將程序正文中將所遇到的宏名展開成宏定義。
#define PI 3.1415926
2.? 可以定義帶參數的宏,具有模板的部分功能,但是最好將宏參數用括號括起來。
#define MIN(a,b) (((a)<(b))?(a):(b))
3.? 通過 ## 宏運算符可以拼接起兩個串。
#define NAME ( a,b ) a##b
4.? #undef X 保證不再有稱為 X 的有定義的宏。
5.? 一種特殊的宏:條件編譯。
#ifdef MACRO_NAME
… …
#endif
意思是:除非應經定義了名為 MACRO_NAME 的宏,否則 #ifdef 與 #endif 之間的語句將被忽略。
C++ 中應該盡量避免使用宏:
1 . #define PI 3.1415926 可以使用 const double PI=3.1415926 代替。
2 . #define MIN(a,b) (((a)<(b))?(a):(b)) 可以使用函數模板代替。
template <class T>
inline T min(T a, T b)
{
?????? return (a<b)?a:b;
}
3. 用于拼接起兩個串的宏和條件編譯的宏仍然有其使用范圍。
宏的優點:
1.? 效率高,執行速度快。但是有的可以使用 C++ 的 inline 函數代替,仍然保持其執行效率。
宏的缺點:
1 .缺乏類型安全檢查和作用域規則檢查,編譯器能看到的只是宏展開后的形式,所以在宏中的錯誤是在宏被展開之后報告的,而不是在它定義時,導致非常難以理解的錯誤信息。
2 .宏名不能重載,而且宏預處理器不能處理遞歸調用。
posted on 2006-03-29 21:21 bo 閱讀(757) 評論(0) 編輯 收藏 引用 所屬分類: Language