宏與內聯函數


轉自:http://blog.chinaunix.net/u/17030/showart_101269.html
第一部分:宏
爲何要使用宏呢?
由於函數的調用必需要將程序執行的順序轉移到函數所存放在內存中的某個地址,將函數的程序內容執行完後,再返回到轉去執行該函數前的地方。這種轉移操做要求在轉去執行前要保存現場並記憶執行的地址,轉回後要恢復現場,並按原來保存地址繼續執行。所以,函數調用要有必定的時間和空間方面的開銷,因而將影響其效率。
而宏只是在預處理的地方把代碼展開,不須要額外的空間和時間方面的開銷,因此調用一個宏比調用一個函數更有效率。
可是宏也有不少的不盡人意的地方。
一、宏不能訪問對象的私有成員。
二、宏的定義很容易產生二意性。
咱們舉個例子:
#define square(x) (x*x)
咱們用一個數字去調用它,square(5),這樣看上去沒有什麼錯誤,結果返回25,是正確的,可是若是咱們用squre (5+5)去調用的話,咱們指望的結果是100,而宏的調用

相關文章
相關標籤/搜索