C中的可变参数

    技术2026-08-28  5

    要利用C语言的可变参数,我们必须首先导入stdarg.h文件,其中定义了

      typedef char * va_list;   #define _INTSIZEOF(n) /   ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )   #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )   #define va_arg(ap,t) /   ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )   #define va_end(ap) ( ap = (va_list)0 )

    可以写个函数测试一下

           void print(int arg1, ...);       void main(){        print(3, "aaa", "bbb", "ccc");       }        void print(int arg1, ...){        va_list arg_ptr;        char* str= NULL;        va_start(arg_ptr, arg1);        for(int i = 0; i < arg1; i++){        str = va_arg(arg_ptr, char*);        printf("%s ", str);        }        va_end(arg_ptr);       }

    由于我们不知道调用者用传几个参数,所以用第一个参数指定参数个数,还有一种方法是让最后一个参数为NULL,例如:

             void print(int arg1, ...);         void main(){          print(5, "aaa", "bbb", "ccc",NULL);         }         void print(int arg1, ...){         va_list arg_ptr;         char* str= NULL;         va_start(arg_ptr, arg1);         for(;;){         str = va_arg(arg_ptr, char*);         if(!str) break;         printf("%s ", str);          }         va_end(arg_ptr);         }

    最新回复(0)