一.#的使用
定義:#就是用來提取生成字串的。
#include
//#就是用來提取生成字串的
#define p(a) printf("%s:%d\n",#a,a)
intmain
(int argc,
char
*ar**)
輸出結果:
二.##巨集定義中用於連線前後兩個巨集變數
#include
//巨集定義連線前後兩個巨集變數的
#define linkname(n) 2##n
#define linkname2(m) a##m
intmain
(int argc,
char
*ar**)
三.va_args,##__va_args__使用及其區別點
#include
#define logi(...) printf(__va_args__)
#define logi2(format, ...) printf(format, __va_args__)
//##_va_args__,前面的##的作用就是當可變引數為0時,
//##可以將巨集定義中逗號前面的format去掉的
#define logi3(format, ...) printf(format, ##__va_args__)
intmain
(int argc,
char
*ar**)
四.args的使用args其實作用和__va_args__一樣的
五.實用舉例實際應用可能需要新增更多的除錯資訊,便於定位和排查錯誤。如定義模組名,檔名,函式名,行數等基本資訊。
#include
#include
//帶有更多的除錯資訊如時間,tag,檔名和函式名與行數
#define tag "my_module_name"
//第一種,精確到秒
/*#define logprint(format, ...) do\
while(0)\
#endif
*///第二種方式 精確到毫秒
#define logprint(format, ...) do\
while(0)\
#define loprint2(...) do\
while(0)\
intmain
(int argc,
char
*ar**)
第一種執行結果
第二種執行結果:
C C 可變引數的使用
可變引數即表示引數個數可以變化,可多可少,也表示引數的型別也可以變化,可以是int,double還可以是char 類,結構體等等。可變引數是實現printf sprintf 等函式的關鍵之處,也可以用可變引數來對任意數量的資料進行求和,求平均值帶來方便 不然就用陣列或每種寫個過載 在c 中有專門的關...
C C 可變引數
函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...
C C 可變引數
函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...