巨集定義函式

2021-07-23 22:08:43 字數 1047 閱讀 3061

巨集定義也可以成為「巨集代換」,c語言提供的三種預處理功能的其中一種,這三種預處理包括:巨集定義、檔案包含、條件編譯。巨集定義和操作符的區別是:巨集定義是替換,不做計算,也不做表示式求解。

c語言編譯工具會在預處理階段,將巨集名替換為字串。

所以,我們可以把巨集定義理解為,發生在程式編譯之前的字串替換操作。

#include

#define val 2.5

int main()

預編譯操作完成之後,所有的val都會被替換為2.5,也就是

#include

int main()

我們可以通過下面的例子更好的理解巨集定義

#include

#define val 1+2

int main()

輸出結果為5,不是6,為什麼呢?因為替換之後變成了這樣

#include

int main()

巨集函式本質上還是字串的替換,一般可以將一些簡單的操作定義為巨集函式,巨集函式可以接受引數,並且可以返回資料。

#include

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

int main()

注意,我們將上面的變數a,b替換為c,d,即max(c,d)也是可以正常執行的,也就是說巨集函式的引數名不一定要和變數一樣。

先看乙個例子

#include

#define fun(x) (x*x)

int main()

輸出結果為6,因為fun(a++)被替換成了(a++*++a)

#include

int main()

int fun(int a)

輸出結果為4

通過上面的兩個例子對比,可以發現巨集函式是直接將相關形參進行了字串替換,並沒有進行任何的計算;普通函式中a++是先將值傳遞給形參,然後再自增,所以實際呼叫的是fun(2)

C語言巨集定義和巨集定義函式

c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...

關於巨集定義函式

擷取部分內容 使用帶引數的巨集定義可完成函式呼叫的功能,又能減少 系統開銷,提高執行效率。正如c語言中所講,函式的使用可以使程式更加模組化,便於組織,而且可重複利用,但在發生函式呼叫時,需要保留呼叫函式的現場,以便子 函式執行結束後能返回繼續執行,同樣在子函式執行完後要恢復呼叫函式的現場,這都需要一...

巨集定義函式使用

開闢一片棧空間 記錄返回位址 將形參壓棧,從函式返回還要釋放堆疊。函式的引數必須被宣告為一種特定的型別,所以它只能在型別合適的表示式上使用,我們如果要比較兩個浮點型的大小,就不得不再寫乙個專門針對浮點型的比較函式。反之,上面的那個巨集定義可以用於整形 長整形 單浮點型 雙浮點型以及其他任何可以用 操...