GCC 可變引數的巨集

2021-08-26 09:09:02 字數 593 閱讀 2949

標準 c只支援可變引數的函式,意味著函式的引數是不固定的,例如printf()函式

的原型為:

int printf( const char *format [, argument]... );

而在gnu c中,巨集也可以接受可變數目的引數,例如:

#define pr_debug(fmt,arg...) \

printk(fmt,##arg)

這裡arg 表示其餘的引數可以是零個或多個,這些引數以及引數之間的逗號構成

arg 的值,在巨集擴充套件時替換arg,例如下列**:

pr_debug("%s:%d",filename,line)

會被擴充套件為:

printk("%s:%d", filename, line)

使用「##」的原因是處理arg 不代表任何引數的情況,這時候,前面的逗號就變

得多餘了。使用「##」之後,gnu c預處理器會丟棄前面的逗號,這樣,**:

pr_debug("success!\n")

會被正確地擴充套件為:

printk("success!\n")

而不是:

printk("success!\n",)

可變引數巨集

在 gnu c 中,巨集可以接受可變數目的引數,就象函式一樣,例如 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadicmacros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 void printf con...

可變引數巨集

參考各可變引數的部落格,才寫出現在的部落格,有不準確之處,還望指出。1.先看些標準c中printf函式原型 標準c就支援可變引數巨集,也就意味著函式的引數是不固定的,例如printf 函式的原型為 int printf const char format,在gnu c中,巨集也可以接受可變數目的引數...

可變引數巨集

可變引數巨集 在 gnu c 中,巨集可以接受可變數目的引數,就象函式一樣,例如 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 void pr...