请教C语言可变参数后面的类型如何能像printf函数那样,不是固定的,表达不清楚,希望有人可以懂小弟我的意思

请问C语言可变参数后面的类型怎么能像printf函数那样,不是固定的,表达不清楚,希望有人可以懂我的意思?
请问C语言可变参数后面的类型怎么能像printf函数那样,不是固定的,表达不清楚,希望有人可以懂我的意思?
------解决思路----------------------
没有什么高深的东西,声明函数的时候用  ...  就代表它接受可变参数了。
实现的时候,调用方会把实际传递的参数按照从右到左的顺序 push 到堆栈里面(可变参数只能使用 cdecl, 不能使用 stdcall 的),函数里面只要获得了第一个参数的地址,加上第一个参数的大小就可以获得第二个参数的地址了,后面的参数一样,只要知道了前面个参数的地址后大小,就可以得到后面一个参数了。
在 printf 中,每一个参数的大小是由其中的 %d 这种类型来获取的,实际上,绝大多的类型在传递的时候都是按 4 个字节来传递的。

在上面的基础上,标准库定义的一组处理可变参数的宏其实是很简单的。

va_list argptr;           // 定义一个指针
va_start(argptr, i);    // 通过第一个固定参数的地址来初始化指针为可变参数的起始地址
int n = va_arg( argptr, int );   // 取出一个值,并把指针加上这个类型的大小
va_end(argptr);         // 把指针置为 NULL

------解决思路----------------------
引用:
Quote: 引用:

还好有百度!
https://www.baidu.com/s?wd=VS2010Express%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%E5%AD%A6%E4%B9%A0%E7%89%88&rsv_spt=1&rsv_iqid=0xd9da5137000037c3&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_n=2&rsv_sug3=1
请教C语言可变参数后面的类型如何能像printf函数那样,不是固定的,表达不清楚,希望有人可以懂小弟我的意思


我的意思是找不到printf函数的在文件中的地方额...

File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\printf.c"
      62:         retval = _output_l(stdout,format,NULL,arglist);
File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c"
     940: int __cdecl _output_l (