1. 程式人生 > >C變參函式其實不難

C變參函式其實不難

//這裡給出的是printf的簡易實現(非原創)
//按照va_list,va_start,va_copy,va_arg,va_end的順序使用
//注意:1.void va_start( va_list ap, parmN );第二個引數是你定義的引數列表的最後一個固定引數。2.T va_arg( va_list ap, T );型別T會有c語言的型別提升摻雜其中,如char->int float->double的自動型別轉換
#include <stdio.h> #include <stdarg.h>   void simple_printf(const char* fmt, ...) { va_list args; va_start(args, fmt);   while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int);
printf
("%d\n", i); } else if (*fmt == 'c') { // 注意自動轉換為整數型別 int c = va_arg(args, int); printf("%c\n", c); } else if (*fmt == 'f') { double d = va_arg(args, double); printf("%f\n", d); } ++fmt; }   va_end(args); }   int main(void) { simple_printf("dcff", 3, 'a', 1.999, 42.5); }