例子:
两个注意点:
- 可变参数里面char会被扩展成int
- 使用printf一次性打印所有可变参数时,第一个可变参数会在最后才被打印(反方向打印)。
#include<stdio.h> #include <stdio.h> #include <stdarg.h> void SHA_Init(char *my_string, ...) { printf("%s\n",my_string); va_list my_va_list; va_start(my_va_list, my_string); printf("%d ",va_arg(my_va_list,int)); printf("%d ",va_arg(my_va_list,int)); printf("%d ",va_arg(my_va_list,int)); printf("%c ",va_arg(my_va_list,int)); printf("%c ",va_arg(my_va_list,int)); printf("%c ",va_arg(my_va_list,int)); printf("%s\n",va_arg(my_va_list,char*)); va_end(my_va_list); printf("%s\n",my_string); } void SHA_Init_2(char *my_string, ...) { printf("%s\n",my_string); va_list my_va_list; va_start(my_va_list, my_string); vprintf("%d,%d,%d,%c,%c,%c,%s\n", my_va_list); va_end(my_va_list); printf("%s\n",my_string); } /* strange case */ void SHA_Init_3(char *my_string, ...) { printf("%s\n",my_string); va_list my_va_list; va_start(my_va_list, my_string); printf("%s %c %c %c %d %d %d\n", va_arg(my_va_list,char*), va_arg(my_va_list,int), va_arg(my_va_list,int), va_arg(my_va_list,int), va_arg(my_va_list,int), va_arg(my_va_list,int), va_arg(my_va_list,int)); va_end(my_va_list); printf("%s\n",my_string); } void SHA_Log(char *format, ...) { va_list args; va_start(args, format); vprintf(format, args); va_end(args); } int main () { SHA_Init("**************************************",1,2,3,'A','B','C',"I love SHA!!!"); SHA_Init_2("+++++++++++++++++++++++++++++++++++",1,2,3,'A','B','C',"I love SHA!!!"); SHA_Init_3("-----------------------------------",1,2,3,'A','B','C',"I love SHA!!!"); SHA_Log("%s Love %s\n", "I", "SHA"); return(0); }
Output :
**************************************
1 2 3 A B C I love SHA!!!
**************************************
+++++++++++++++++++++++++++++++++++
1,2,3,A,B,C,I love SHA!!!
+++++++++++++++++++++++++++++++++++
-----------------------------------
I love SHA!!! C B A 3 2 1
-----------------------------------
I Love SHA