在本節中,我們將看到C語言中巨集和函數之間的差異。巨集是預處理的,這意味著在編譯時將對所有巨集進行預處理。函數不進行預處理,而是編譯。
在巨集中不進行類型檢查,因此可能會出現不同類型輸入的問題。而對於函數,這不會發生。此外,如果巨集的輸入沒有正確維護,可能會產生一些無效的結果。請查看以下程序以了解問題。
#include <stdio.h> #define SQUARE(x) x * x int sqr(int x) { return x*x; } main() { printf("Use of sqr(). The value of sqr(3+2): %d</p><p>", sqr(3+2)); printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2)); }
Use of sqr(). The value of sqr(3+2): 25 Use of SQUARE(). The value of SQUARE(3+2): 11
函數和宏,我們希望兩者都執行相同的任務,但是在這裡我們可以看到輸出結果不同。主要原因是當我們將3 2作為函數參數傳遞時,它會轉換為5,然後計算5 * 5 = 25。而對巨集來說,它執行的是3 2 * 3 2 = 3 6 2 = 11。
因此,巨集不建議用於以下問題:
沒有類型檢查
預設為偵錯模式,因為巨集只是簡單的替換
巨集沒有命名空間。因此,如果巨集在一個部分中定義,它可以在另一個部分中使用。
巨集會增加程式碼長度,因為它是在預處理之前新增的。
巨集不檢查任何編譯時錯誤。
以上是宏與函數在C的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!