在C语言中,处理可变参数通常需要使用到<stdarg.h>这个头文件,它提供了处理可变参数列表的功能。下面我将分点回答你的问题,并包含相应的代码片段来佐证。 1. 理解C语言可变参数的概念 在C语言中,可变参数允许函数接受不确定数量的参数。这通常用于那些参数的个数在编译时未知,但在运行时确定的场景,如printf...
开始Debug,通过观察函数的栈,传入的可变参数是 OK的,证明__VA_ARGS__在一堆宏之间传递没有问题。那为什么StringCchPrintf取不出这些可变参数呢?其实非常简单: 就 像前面说的一样,具有可变参数的函数在处理时,使用的是va_list/va_start...这些宏,这些宏是在本函数的堆栈上进行指针操作,而我们在 调用StringCchPrint...
va_list就是一个char *,va_start是一个宏,它的作用就是将args这个参数设置成format参数地址+format参数的字节数 -- 说白一些就是,将args设置成函数栈中format以后的位置上,这样args就指向了可变参数的开头。接着可以使用va_arg参数将可变参数一个一 个取出,这也是为什么va_arg宏要提供一个参数type的原因:va_a...
va_list就是一个char *,va_start是一个宏,它的作用就是将args这个参数设置成format参数地址+format参数的字节数 -- 说白一些就是,将args设置成函数栈中format以后的位置上,这样args就指向了可变参数的开头。接着可以使用va_arg参数将可变参数一个一 个取出,这也是为什么va_arg宏要提供一个参数type的原因:va_a...