1."#"、"##"的一般用法:
#define str(s) #s
#define cons(a,b) int(a##e##b)
int main()
2."##"接受,列印可變引數
參考:glibc庫的bebug函式
/*
# define printf(fmt, args...) \
printf (fmt, ##args); \
*/
使用方法:
#define pr_debug(fmt,arg...) printk(fmt,## arg)
這裡arg 表示其餘的引數可以是零個或多個,這些引數以及引數之間的逗號構成arg 的值,在巨集使用##擴充套件時替換arg,
例如下列**:
pr_debug("%s:%d",filename,line) 會被擴充套件為:
printk("%s:%d", filename, line)
3.解析可變引數
參考: glibc, printf函式
/* printf (const char *format, ...)
*/// 舉例
#include #include #include static int demo(char *msg, ... )
va_end(ap);
return 0;
}void main()
/* 結果:
book@gui_hua_shu:~/test$ ./a.out
0 is: this
1 is: is
2 is: a
3 is: demo!
*/
可變引數解析
提供了以下資料型別和巨集,以便我們編寫長度可變的函式 typedef char va list define intsizeof n sizeof n sizeof int 1 sizeof int 1 define va start ap,v ap va list v intsizeof v de...
可變引數實現log列印
實現步驟如下 函式原型中使用省略號 函式定義中建立乙個va list變數 3.初始化va list變數 4.訪問引數列表 5.完成清理工作 上述步驟的實現需要使用到四個巨集 va list va start va list,arg va arg va list,type va end va list...
vsnprintf列印可變引數的log
vsnprintf,c語言庫函式之一,屬於可變引數。用於向字串中列印資料 資料格式使用者自定義。標頭檔案 include 函式宣告 int vsnprintf char str,size tsize,constchar format,va listap 引數說明 char str out 把生成的格...