#define定義 識別符號
語法: #define name stuff
#define定義 巨集
語法:#define name(乙個或者多個逗號隔開引數) stuff
例如:#define max(a,b)((a)>(b)?(a):(b))
定義了乙個名為max的巨集,功能為取兩個數中的較大數
注意:用於對數值表示式進行值的巨集定義都應該加上括號,避免在用巨集時由於引數中的操作符或者鄰近的操作符之間不可預料的相互作用
看到這裡,肯定會有人想,定義的巨集和函式有什麼區別呢?寫法和功能上和函式沒什麼兩樣啊,下面就來比較一下巨集和函式的區別。
屬性define巨集
函式**長度
每次使用巨集時,巨集**都沒插入到子程式中,除了非常小的巨集之外,程式的長度將大幅度增長
函式**只出現於乙個地方,每次使用此函式時,都在同乙個地方地方呼叫
執行速度
更快存在函式呼叫/返回的額外開銷
操作符優先順序
巨集引數的求值是在所有的周圍表示式的上下文環境中,除非他們加上括號,否則相鄰操作符的優先順序可能會產生不可預料的結果
函式引數只在函式呼叫時求值一次,它的結果值傳遞給函式,表示式的求職結果更容易**
引數求值
引數每次用於巨集定義時,都將重新求值,由於多次求值,具有***的引數可能會產生不可**的結果
引數在函式被呼叫時只求值一次,在函式中多次使用引數並不會導致多種求值過程,引數的***不會造成任何特殊的問題
引數型別
巨集與型別無關,只要對引數的操作是合法的,他可以使用任何引數型別
函式的引數是與型別有關的,引數型別不同,就需要不同的函式,即使執行的任務是相同的
巨集定義**示例
1.將乙個數字的奇數字和偶數字交換
#include
#define ex(num)\
((((num)&(0x55555555)) << 1) | (((num)&(0xaaaaaaaa)) >> 1))
//取出奇數字將偶數字清零 將偶數字取出來奇數字清零
int main()
2.使用巨集實現兩個數中求較大值
#include
#define max(x,y)\
((x) > (y) ? (x) : (y))
int main()
define巨集定義的簡單總結
1 define pi 3.14159262 define char a a 3 define string a a 1 define square x x x 2 3 inta square 2 4 intb square 2 3 使用引數的巨集定義中,注意在巨集的替換主體部分對引數使用括號。上例...
inline函式和 define巨集定義簡單講解
在c語言,實際上inline的出現是為了填補巨集定義的缺點。巨集定義是在編譯器預編譯的時候把define定義的關鍵字進行替換。用巨集定義的好處是巨集定義在形式及使用上像乙個函式,但它使用預處理器實現,沒有了引數壓棧,生成等一系列的操作。因此,效率很高,這是它在c中被使用的乙個主要原因。1 inlin...
define巨集定義
預處理指令 以 開頭的行,都預處理指令,用於指示編譯器做一些預處理工作。比如 include h 注 預處理指令不是語句,行尾不要加分號 define的兩種用法 1.定義乙個 數值 2.定義乙個 算式 注 工程中應該避免使用這兩種方式 定義乙個值 define pi 3.14 int main 定義...