#define
函式
#define
debug(
x) ((x)+(x))
如上所示,用於對數值表示式進行求值的巨集定義都應該用這種方式加上括號,避免在使用巨集時由於引數中的操作等或鄰近操作符之間不可預料的相互作用。
#define
替換
1.在呼叫巨集時,首先對引數進行檢查,看看是否包含任何由
#define
定義的符號,如果是,它們首先被替換。
2.替換文字隨後被插入到程式中原來文字的位置。對於巨集,引數名被它們的值替換。
替換文字指的是
#define
debug(x)
((x)+(x
))中的((x
)+(x))
3.最後,再次對結果檔案進行掃瞄,看看它是否包含任何由
#define
定義的符號,如果是,就重複上述的處理過程。
巨集引數和
#define
定義可以包含其他
#define
定義的符號,但是,巨集不可以出現遞迴,也就是不可以自己呼叫自己。
若想要在巨集裡面寫乙個大面積的**,最好用
dowhile(0)
把**括起來,這樣寫會帶來很多方便,比如最後人們寫**習慣加分號,還有可以使在執行時不會出現邏輯上的錯誤。
#include#include#define fun1 dowhile(0)
int main()
像這樣就可以,若不用
dowhile(0)
,if else就無法正常使用。
#的用法
我們知道printf()函式具有鄰近字串的連線性。
給乙個巨集的引數前面加上乙個
#,會把引數轉換成引數代表的字面值。
#include#include#define m 9
#define print(format, value) \
printf("the value of "#value" is "format"\n",value)
int main()
## 的用法
##結構則執行一種不同的任務,他可以把它兩邊的巨集符號連線成乙個巨集符號。作為作用之一,它允許巨集定義從分離的文字段建立表示符。
說白了,可以把兩個名稱通過##連線在一起,構成乙個新的巨集名稱。
#include#include#define str1 "vrey"
#define str2 "good"
#define str1str2 "12345678"
#define cat(a,b)\
a##b
int main()
還應該注意巨集的命名:巨集命名全部都是大寫
#undef
這個預處理指令用於移除乙個指定的巨集定義
格式:#undef name
c語言解除巨集定義 C語言中巨集定義的用法
說到巨集定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們程式設計時,程式的開頭 include指令,define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此c語言中是允許使用者自己加入一些特定的預處理指令的。一,不帶引數的巨集定義 不帶引數的巨集定義是比較簡單的,就是...
C語言巨集定義總結
巨集定義是在編譯器編譯過程中就會執行掉的操作,這裡將常用規則和方法總結,後續會更新,方便查詢。無參巨集定義和帶參巨集定義就不講了,看一下就會了。這裡主要針對我在實際過程中遇到的問題 這是乙個很常見的問題,網上有很多解釋,但受限於每個人掌握的知識程度不同,因此真正理解還是得看個人。先說一下 和 的區別...
C語言巨集定義中 用法
c語言巨集定義中 用法 巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 i nclude i nclude using namespace std define str s s define cons a,b int a e b int mai...