簡單易懂的巨集使用說明案例

2021-09-13 16:27:51 字數 4180 閱讀 9013

再來說明

前幾天改乙份老**用,乙份錯誤為了糾錯而糾錯將**寫的很長的**,150多行,實際操作只有70行。一篇**,螢幕都看不到一對{},所以在這裡給跟我原來一樣的人,講講巨集,能幫你讓**可讀性更好,更便於維護。

18 #include

19 #include

20 #define to char type;

/*注釋必須用斜槓+星+注釋內容+星+斜槓*/\

21char

* ptype=

&type;

/*拼接符'\'必須在最後,且前面不能有'\\'*/\

22struct test the_test;the_test.abc=2;

/*可以一行寫多個執行語句*/\

23struct test*ptest=

&the_test;

//這裡就可以使用雙斜槓了'//',因為後面沒有拼接符[39]

24 #define toa

(type)

printf

("%d\n"

,*type)

;//運算子不用拼接[42]

25 #define tob

(p)printf

("%d\n"

,*p##type)

;//非運算子需要拼接[43]

26 #define toc

(type)

printf

("%d\n"

,type->abc)

;//也是運算子不用拼接[44]

27 #define tod

(type)

printf

("%d\n"

,type##bc)

;//拼接優先順序大於運算子優先順序,展開為type->abc,先拼接,後運算[45]

28 #define toe

(type)

printf

("%d\n"

,type abc)

;//運算子不用拼接,但是連打無法識別,所以用空格隔開type展開為type->[46]

29 #define tof

(type)

printf

("%s\n"

,#type)

;//轉換為字串[47]

30//巨集只做替換,實際不做運算,不會幫你加括號,下面就是對比

31 #define tog

(a,b) a+b//不加括號,展開後會根據+優先順序來判斷是否先a+b[48]

32 #define toh

(a,b)

(a+b)

//加了括號,展開後會根據()的高優先順序先運算a+b,得到其和再去運算[49]

格式為:巨集+展開前+**+展開後

因為拼接符並不是巨集操作獨有,所以就不說明了

展開前:

toa

(type)

printf

("%d\n"

,*type)

;//運算子不用拼接[42]

**:

toa

(ptype)

//測試運算子是否需要拼接的請看這個巨集[24]

展開後

printf

("%d\n"

,*ptype)

;

展開前:

tob

(p)printf

("%d\n"

,*p##type)

;//非運算子需要拼接[43]

**:

tob

(p)//測試非運算子是否需要拼接的請看這個巨集[25]

展開後

printf

("%d\n"

,*ptype)

;

展開前:

toc

(type)

printf

("%d\n"

,type->abc)

;//也是運算子不用拼接[44]

**:

toc

(ptest)

//不確定是否所有運算子都不用拼接的請看這個巨集,前面測試單目,這裡雙目,還是不信,自己去測三目[26]

展開後

printf

("%d\n"

,ptest->abc)

;

展開前:

tod

(type)

printf

("%d\n"

,type##bc)

;//拼接優先順序大於運算子優先順序,展開為type->abc,先拼接,後運算[45]

**:

tod

(ptest->a)

//測試運算子拼接的請看這個巨集[27]

展開後

printf

("%d\n"

,ptest->abc)

;

展開前:

toe

(type)

printf

("%d\n"

,type abc)

;//運算子不用拼接,但是連打無法識別,所以用空格隔開type展開為type->[46]

**:

toe

(ptest->

)//測試如果輸入末尾是運算子,該怎麼書寫的看這個巨集[28]

展開後

printf

("%d\n"

,ptest->abc)

;

展開前:

tof

(type)

printf

("%s\n"

,#type)

;//轉換為字串[47]

**:

tof

(ptest->abc)

//測試將輸入變為字串的請看這個巨集[29]

展開後

printf

("%d\n"

,"ptest->abc"

);

展開前:

tog

(a,b) a+b//不加括號,展開後會根據+優先順序來判斷是否先a+b[48]

**:

printf

("5*tog=%d\n",5

*tog

(ptest->abc,type));

//測試巨集是否先運算的看這裡[31]

展開後

printf

("5*tog=%d\n",5

*ptest->abc+type));

//5*2+1=11

展開前:

toh

(a,b)

(a+b)

//加了括號,展開後會根據()的高優先順序先運算a+b,得到其和再去運算[49]

**:

printf

("5*tog=%d\n",5

*toh

(ptest->abc,type));

//測試巨集只做替換的看這裡,與上面的對比[32]

展開後

printf

("5*tog=%d\n",5

*(ptest->abc+type));

//5*(2+1)

ORMLite簡單使用說明

最近學習了ormlite資料庫框架,將我了解到的一些簡單使用方法記下來。使用前你需要自己定義乙個dbhelper類繼承ormlitesqliteopenhelper。裡面要新增乙個無參建構函式和重寫裡面的oncreate方法。如下 public class dbhelper extends orml...

Git 簡單使用說明

mkdir project 建立專案目錄 cd project 進入專案目錄 git init 初始化 git 本地倉庫。此命令會在當前目錄新建乙個 git 目錄,用於儲存 git 倉庫的相關資訊。touch readme 建立readme檔案好習慣 git add 將當前目錄新增到 git 倉庫中...

MPI簡單使用說明

1.程式最開始需呼叫mpi庫 include mpif.h 2.進入mpi工作環境需先輸入下面三個命令 mpi init ierr 初始化mpi工作環境 mpi comm rank mpi comm world,myid,ierr myid 程序號 mpi comm size mpi comm wo...