define 宏定義
- 執(zhí)行時間:編譯時執(zhí)行替換
特殊符號:#
作用:用來把參數(shù)轉(zhuǎn)化為字符串
示例:
#define P(A) printf("%s:%d\n",#A,A);
特殊符號:##
作用:用來把參數(shù)進行連接
示例:
#define XNAME(n) x ## n
特殊符號:VA_ARGS
作用:用來代表宏定義中參數(shù)列表的最后一個參數(shù)為省略號(也就是三個點)
示例:
#define def_print1(...) printf(__VA_ARGS__)
def_print1("i=%d,j=%d\n",i,j) //正確打印輸出
特殊符號:##VA_ARGS
作用:當可變參數(shù)的個數(shù)為0時占哟,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯
示例:
#define def_print2(fmt, ...) printf(fmt, __VA_ARGS__)
def_print2("iiiiiii\n"); //編譯出錯心墅,因為需要至少2個參數(shù)
#define def_print3(fmt, ...) printf(fmt, ##__VA_ARGS__)
def_print3("iiiiiii\n");//編譯成功,一個參數(shù)也可以榨乎,這就是##__VA_ARGS__的作用
特殊作用:用在調(diào)試信息上輸出期望的錯誤信息多一點
#define MODULE_NAME "MY_LIB"
#define def_error_print(fmt, ...) printf("[ERROR]["MODULE_NAME"](%s|%d)" fmt, __func__, __LINE__, ##__VA_ARGS__)
def_error_print("i=%d,j=%d\n",i,j);// 正確打印輸出