标签:tchar 利用 start stdarg.h var 变量 函数传参 需要 结束
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必须同时存在。
标签:tchar 利用 start stdarg.h var 变量 函数传参 需要 结束
原文地址:http://www.cnblogs.com/m2492565210/p/7112981.html