宏和函數的區別

#define和函數的區別如下:

代碼長度:#define每次使用時,宏代碼都被插入到程序中,除了非常小的程序外,宏代碼將大幅度增長;

函數代碼只出現於一個地方,每次使用這個函數時,都調用那個地方的同一份代碼

執行速度:#define宏更快;函數存在函數調用/返回的額外開銷

操作符優先級:宏參數的求值是在所有周圍表達式的上下文環境裏,除非他們加上括號,否則鄰近操作符的優先級可能會產生不可預料的結果;函數參數只在函數調用時求值一次,它的結果值傳遞給函數,表達式的求值更容易預測

參數求值參數每次使用宏定義時,它們都將重新求值,由於多次求值具有副作用的參數可能會產生不可預料的結果;

參數在函數調用前只求值一次,在函數中多次使用參數並不會導致多種求值過程,參數的副作用並不會造成任何問題

參數類型:宏與類型無關。只要對參數的操作是合法的,它可以使用任何參數類型;函數的參數是與類型有關的。如果參數的類型不同,就需要使用不同的函數,即使它們執行的任務是相同的







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章