巨集和函式有什麼區別?

2021-07-25 03:48:00 字數 1334 閱讀 6033

(#define)巨集可以頻繁的用於執行簡單的計算。但一般是巨集的**很短,才使用巨集,否則使用巨集會使程式長度大幅度提公升。

函式可以寫一些複雜的的計算。

比如下面這個比較大小的兩個數字的大小

#include#include#define max(a,b) ((a)>(b)?(a):(b))

int main()

這裡不用函式而用巨集的原因有兩個:

1.因為使用函式呼叫比使用巨集的工作代價大,所以對於這類程式使用巨集比使用函式的速度更快。因為巨集只是替換不需要呼叫,而函式需要呼叫。

2.巨集是與型別無關的。函式的引數使用時必須宣告型別,只有型別合法才可以使用。然而,巨集可以使用與整型、長整型、單浮點型、雙浮點型等等。

還有一些**是使用函式無法實現的

比如下面這個動態分配空間使用函式是無法實現的:

#include#define malloc(a, type)  \

((type*)malloc((a)*sizeof(type)))//動態申請了10個type型別的空間

int main()

因為巨集的第二個引數是乙個型別,型別可以作為巨集的引數進行傳遞,不可以作為函式的引數進行傳遞。

#define巨集與函式的比較

屬性#define巨集 函式

**長度

一般是巨集的**很短,才使用巨集,否則使用巨集會使程式長度大幅度提公升。

函式的**只出現在乙個地方,每次代用都去那個地方呼叫。

執行速度

比函式快

函式需要呼叫,返回值會有開銷

操作符優先順序

函式的引數是在周圍表示式的上下文的環境裡,建議給巨集的每個引數帶括號

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

引數求值

引數每次用於巨集定義時,都進行求值,由於多次求值,帶有***的引數有可能帶來其他意料之外的結果

引數在函式被呼叫前只求值一次,在函式中多次使用引數並不會帶來多種求值。

引數型別

巨集與型別無關

函式的引數與型別有關

RPA 和 Excel 巨集有什麼區別

最近,rpa 作為自動化日常工作越來越引起了大家的關注。同樣,許多人可能已經使用 excel 的巨集功能作為自動執行日常任務的工具。可能很多的朋友想知道 excel 巨集和 rpa 機械人有什麼樣的功能以及如何單獨使用它們。rpa 的基本概念 rpa 機械人過程自動化 機械人過程自動化 是一種機械人...

含引數的巨集與函式有什麼區別?

含引數的巨集有時完成的是函式實現的功能,但是並非所有的函式都可以被含引數的巨集所替代,各自特點如下 函式呼叫時,首先求出實參表示式的值,然後帶入形參。而使用帶參的巨集只是進行簡單的字元替換。函式呼叫是在程式執行時處理的,它需要分配臨時的記憶體單元 而巨集展開是在編譯時進行的,在展開時並不分配記憶體單...

指標函式和函式指標有什麼區別

1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上,每乙...