含引數的巨集有時完成的是函式實現的功能,但是並非所有的函式都可以被含引數的巨集所替代,各自特點如下:
函式呼叫時,首先求出實參表示式的值,然後帶入形參。而使用帶參的巨集只是進行簡單的字元替換。
函式呼叫是在程式執行時處理的,它需要分配臨時的記憶體單元;而巨集展開是在編譯時進行的,在展開時並不分配記憶體單元,也不進行值的傳遞處理,也沒有「返回值」的概念。
對函式中的實參和形參都要定義型別,兩者的型別要求一致,如果不一致,應進行型別轉換;而巨集不存在型別問題,巨集名無型別,它的引數也無型別,只是乙個符號代表,展開時帶入指定的字元即可。巨集定義時,字串可以是任何型別的資料。
呼叫函式只可得到乙個返回值,而用巨集可以設法得到幾個結果。
使用巨集次數多時,巨集展開後源程式會變得很長,因為每展開一次都使程式內容增長,而函式吊哦用不使源程式變長。
巨集替換不占用執行時間,而函式呼叫則佔執行時間(分配單元、保留現場、值傳遞、返回)。
引數每次用於巨集定義時,他們都將重新求值,由於多次求值,具有***的引數可能導致不可預料的結果。而引數在函式被呼叫前只求值一次,在函式中多次使用引數並不會導致多種求值過程,引數的***並不會造成任何特殊的問題。
一般來說,用巨集來代表簡短的表示式比較合適。
巨集和函式有什麼區別?
define 巨集可以頻繁的用於執行簡單的計算。但一般是巨集的 很短,才使用巨集,否則使用巨集會使程式長度大幅度提公升。函式可以寫一些複雜的的計算。比如下面這個比較大小的兩個數字的大小 include include define max a,b a b a b int main 這裡不用函式而用巨...
含引數的巨集與函式的區別
含引數的巨集與函式的區別 巨集替換不佔執行時間,只佔編譯時間 而函式呼叫則佔執行時間 分配單元 保留現場 值傳遞 返回 所以每次執行都要載入所以執行起來比較慢一些。定義巨集的時候不要在巨集及其引數之間鍵入空格,因為巨集替換的時候會把你不經意打的空格當作巨集的一部分進去。在巨集定義中把每個引數都用括號...
與 有什麼區別
一 簡要說明 按位與 a b是把a 和b都轉換成二進位制數然後再進行與的運算 邏輯與 a b 就是當且僅當兩個運算元均為 true 時,其結果才為 true 只要有乙個為零,a b 就為零。例如 a b 9 8 1001 1000 結果是1000 a b 9 8 結果是1 對每乙個都判斷 只要前面是...