巨集定義的注意事項

2021-07-01 23:11:37 字數 444 閱讀 6929

巨集定義不是函式,它只是不同形式的替換而已,不同於函式的引數巨集定義的引數(暫且稱之為引數)不是作為乙個整體參與計算的,如下例子所示:

#include 

using

namespace

std;

#define fun1(x) (x*x)

#define fun2(x) ((x)*(x))

int fun3(int x)

int fun4(int x)

int main()

**執行結果為:14,36,36,36

巨集定義fun1之所以會出現這樣的結果,是因為巨集定義只是簡單替換,即把fun1(x)替換成 x*x 的形式,那麼程式中的fun1(b+2)被替換成了b+2*b+2,即4+2*4+2=14,而普通函式不存在這種問題,加不加括號,函式的引數都會當成整體來處理。

巨集注意事項

define a b c 如果使用a將會替換成b c,使用a b會得到b c b define a b c 如果使用a將會替換成 b c 注意上面加括號與不加是完全不同的,特別是在定義函式和函式指標的時候。下面例子 上面這行 展開應該是這樣的 這是在定義函式指標!而不是在定義函式!但是如果把括號去掉...

巨集函式的注意事項

巨集定義注意事項 1.巨集函式的引數沒有型別,預處理器只負責做形式上的替換,而不做引數型別檢查,所以傳參時要格外小心。2.巨集函式定義要注意格式,尤其是括號,否則易出現優先順序錯誤。3.巨集函式往往會導致較低的 執行效率,甚至導致預料外的結果。比如 define min a,b a b a b ch...

C語言巨集定義用法注意事項與好處

1.乙個識別符號被巨集定義後,該識別符號便是乙個巨集名。這時,在程式中出現的是巨集名,在該程式被編譯前,先將巨集名用被定義的字串替換,這成為巨集替換,替換後才進行編譯,巨集替換是簡單的替換 2.include define n 2 int main int argc,char argv 這段程式執行...