C 實現可變參數
阿新 • • 發佈:2017-07-03
clas 判斷 pan class 同時存在 va_list span ... 需要
C中可以借助va_list實現可變參數:
va_start:使用傳入的可變參數的第一個變量初始化va_list
va_arg:獲取當前可變參數,每次調用時會將指針向後移
va_end:結束
利用這個機制實現可變參數時,需要保證傳入的參數可判斷結束位置,即第一個參數用於控制結束,同時傳入的參數必須得有這個參數作為結束。
C可變參數的實現原理基於函數傳參數的的棧,參數從右往左入??,通過第一個參數可以確定參數棧的位置,然後利用數據類型,配合結束符,可以將所有參數取出來。
#include <stdio.h> #include <stdarg.h> #include <string.h> void testchar(const char *var, ...) { va_list args; va_start(args, var); char *value; while(strcmp((value=va_arg(args, char*)), var)) { printf("%s\t", value); } va_end(args); printf("\n"); } void testint(int count,...) { va_list args; va_start(args, count);for (int i=0; i<count; i++) { printf("%d\t", va_arg(args, int)); } printf("\n"); va_end(args); } int main(void) { testchar("eof", "abc", "123", "eof"); testint(3, 1, 2, 3); return 0; }
註意:va_start和va_end必須同時存在。
C 實現可變參數