巨集定義中#的功能是將其後面的巨集引數進行字串化操作(stringfication),舉個例子就明白了:
#define warn_if(exp) /
do /
while(0)
使用warn_if (divider == 0);
被替換為
do while(0);
ok,講##了,連線符(concatenator),用來將兩個token連線為乙個token,例子出發:
#define link_multiple(a,b,c,d) a##_##b##_##c##_##d
使用typedef struct _record_type link_multiple(name,company,position,salary);
這裡這個語句將展開為:
typedef struct _record_type name_company_position_salary;
...在c巨集中稱為variadic macro,也就是變參巨集。
具體方法以後再學習。因為今天沒有時間,哈哈。
關於巨集定義中 與 的用法
巨集在條件編譯以及各種大規模的定義裡是非常有用的。前面qt原始碼學習筆記裡就有一篇用來介紹巨集的定義。這次主要介紹下巨集定義裡 的作用。關於巨集,注意可以用gcc e test.cpp來檢視預編譯之後的結果。1.先介紹 主要是字串替換的作用。將傳入的符號轉化為字串 直接上源 define marco...
巨集定義中if語句的用法
當巨集定義中含有 if 時 1 定義如下巨集 define dc p if foo p fun p 用在下面的環境中 if k n dc k else dc n 巨集替換後,如下 if k n if foo k fun k else if foo n fun n 可見,原來的 if 和 else 不...
巨集定義的用法
有五種用法,含有引數和不含引數,行尾都不用加分號 define 識別符號 替換列表 類似於全域性變數了 如果其他檔案沒有包含定義巨集的檔案,則在巨集定義的位置結束,如果有包含,則到包含的檔案結束 define largest num 1000 define 識別符號 引數列表 替換列表 注意,替換列...