變參函式
來自 cppreference.com
< c
變長引數函式是接受可變數量引數的函式(例如 printf)。
變長引數函式的宣告使用省略號作為最後一個引數,例如 int printf(const char* format, ...);。有關語法和自動引數轉換的更多詳細資訊,請參閱變長引數。
從函式體訪問變長引數使用以下庫設施:
型別 | ||
儲存 va_start、va_arg、va_end 和 va_copy 所需的資訊 (typedef) | ||
宏 | ||
定義於標頭檔案
<stdarg.h> 中 | ||
啟用對變長函式引數的訪問 (函式宏) | ||
訪問下一個變長函式引數 (函式宏) | ||
(C99) |
複製變長函式引數 (函式宏) | |
結束變長函式引數的遍歷 (函式宏) |
[編輯] 示例
列印不同型別的值。
執行此程式碼
#include <stdarg.h> #include <stdio.h> void simple_printf(const char* fmt, ...) { va_list args; for (va_start(args, fmt); *fmt != '\0'; ++fmt) { switch(*fmt) { case 'd': { int i = va_arg(args, int); printf("%d\n", i); break; } case 'c': { // A 'char' variable will be promoted to 'int' // A character literal in C is already 'int' by itself int c = va_arg(args, int); printf("%c\n", c); break; } case 'f': { double d = va_arg(args, double); printf("%f\n", d); break; } default: puts("Unknown formatter!"); goto END; } } END: va_end(args); } int main(void) { simple_printf("dcff", 3, 'a', 1.969, 42.5); }
輸出
3 a 1.969000 42.50000
[編輯] 參考
- C23 標準 (ISO/IEC 9899:2024)
- 7.16 變長引數 <stdarg.h> (p: TBD)
- C17 標準 (ISO/IEC 9899:2018)
- 7.16 變長引數 <stdarg.h> (p: TBD)
- C11 標準 (ISO/IEC 9899:2011)
- 7.16 變長引數 <stdarg.h> (p: 269-272)
- C99 標準 (ISO/IEC 9899:1999)
- 7.15 變長引數 <stdarg.h> (p: 249-252)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.8 變長引數 <stdarg.h>
[編輯] 另請參閱
C++ 文件中的 變長引數函式
|