C 可變引數,「 VA ARGS

2021-10-02 08:43:23 字數 1141 閱讀 5918

一、可變巨集引數

在gnu c中,巨集可以接受可變數目的引數,就象函式一樣,例如:

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

printk(kern_debug fmt, ##arg)

用可變引數巨集(variadic macros)傳遞可變參數列

你可能很熟悉在函式中使用可變參數列,如:

void printf(const char* format, ...);
c99編譯器標準終於改變了這種局面,它允許你可以定義可變引數巨集(variadic macros),這樣你就可以使用擁有可以變化的參數列的巨集。可變引數巨集就像下面這個樣子:

#define debug(...) printf(__va_args__)
cpp使用乙個特殊的』##』操作。書寫格式為:## __va_args__ 這個運算子把兩個語言符號組合成單個語言符號,為巨集擴充套件提供了一種連線實際變元的手段

使用中:

二、容器列表initializer_list 缺點引數列表型別必須相同型別,適應性較差。使用簡單

標頭檔案:#include

int sum(initializer_listil) 

return sum;

}

int ret = sum();
三、可變引數模板

template std::ostream &print(std::ostream &os, const t &t) 

//包中除最後乙個元素之外的其他元素都會呼叫這個版本的pirnt

template std::ostream &print(std::ostream &os, const t &t, const args &... rest)

使用:

可變引數巨集 VA ARGS

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

可變引數巨集 VA ARGS

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

可變引數巨集 VA ARGS

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