C C 可變引數的使用詳解

2021-10-09 05:00:26 字數 1897 閱讀 7910

一.#的使用

定義:#就是用來提取生成字串的。

#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...