(2018 4 8)巨集與函式的區別

2021-08-18 10:11:08 字數 867 閱讀 9575

1、#define :每次使用時,巨集**都被插入到程式中,除了非常小的巨集之外,程式的長度將大幅度增長。

2、函式: 函式**只出現在乙個地方,每次使用這個函式時,都呼叫那個地方的同一**。

1、#define: 巨集引數的求值是在所有周圍表示式的上下文環境裡,除非它們加上括號,否則鄰近操作符的優先順序可能會產生不可預料的後果。

2、 函式: 函式引數只在函式呼叫時求值一次,他的結果值傳遞給函式,表示式的求值結果更容易**。

1、#define:引數每次用於巨集定義時,它們都將重新求值,由於多次求值,具有***的引數可能會產生不可預料的後果。

2、函式:引數在被函式呼叫之前只求值一次,在函式中多次使用引數並不會導致都中求值過程。引數的***並不會造成任何特殊問題。

1、#define:更快

2、函式:存在函式呼叫/返回的額外開銷

1、define:巨集與型別無關,只要對引數的操作是合法的,它可以使用與任何引數型別。

2、函式 :函式的引數與型別有關,如果引數的型別不同,就需要使用不同的函式,即使他們執行的任務是相同的。

#include

#include

#define count(a) ((a&(0x55555555))<<1)|((a&(0xaaaaaaaa))>>1))
int main()

#include

#include

#define max(a, b) ((a > b)? a : b)
int main()

巨集函式與普通函式的區別

我們由問題展開 1.什麼是巨集函式?2.巨集函式與普通函式的相同點?不同點?3.巨集函式與普通函式的優缺點?在這之前看一下巨集的定義 巨集是根據一系列預定義的規則替換一定的文字模式。define buffer size 1024預處理階段,fun char malloc buffer size 會被...

巨集與內聯函式的區別

總結目的 本人曾經一度選擇放棄開發崗位,然後僅僅三個月之後又覺得自己的選擇是錯誤的,還是應該繼續自己比較擅長的開發,然而一次面試卻讓我發現,很小的知識點已經遺忘。1 巨集只做簡單的字串替換,函式是引數傳遞,所以必然有引數型別檢查 支援各種型別,而不是只有字串 2 巨集不經計算而直接替換引數,函式呼叫...

內聯函式與巨集的區別

產生 比較 1 巨集呼叫並不執行型別檢查,甚至連正常引數也不檢查,但是函式呼叫卻要檢查。2 c語言的巨集使用的是文字替換,可能導致無法預料的後果,因為需要重新計算引數和操作順序。3 在巨集中的編譯錯誤很難發現,因為它們引用的是擴充套件的 而不是程式設計師鍵入的。4 許多結構體使用巨集或者使用不同的語...