可變引數巨集定義 VA ARGS

2021-08-19 18:26:38 字數 522 閱讀 5799

1)使用va_args

#define log(…) printf (__va_args__)

#define log_err(format, …) printf ("[err]"format"\n", ##__va_args__)

#define log_err(format, …) printf ("[err]"format"\n", __va_args__) //標準c要求至少帶有乙個引數,gcc可以不帶引數

使用##時可變引數可以為空,不會引起編譯錯誤

__va_args__在標準c中當變參為空時可能出現編譯錯誤

"##"的作用是對token進行連線,如果token為空,那麼不進行連線,所以允許省略可變引數(__va_args__和args),而不出現編譯錯誤

2)args…

#define log(args…) printf (args)
args…是gcc遺留的寫法,不建議使用。

可變引數巨集 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 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如...