1. 程式人生 > >C 實現可變參數

C 實現可變參數

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 實現可變參數