首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

va_start va_arg va_end 的原理与实例

//int i = va_arg( ap, int );       //如果有多个参数继续调用va_arg       /****** Step 3 ******/       va_end...#define va_arg _crt_va_arg #define va_end _crt_va_end #define  _crt_va_start(ap,v)    ( ap = (va_list...va_end(arg_ptr):清空参数列表,并置参数指针arg_ptr无效。说明:指针arg_ptr被置无效后,可以通过调用 va_start()、va_copy()恢复arg_ptr。...每次调用va_start() / va_copy()后,必须得有相应的va_end()与之匹配。参数指针可以在参数列表中随意地来回移动,但必须在va_start() … va_end()之内。...va_end把argp指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。

2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一个printf(结构体指针)引发的血案

    四、C语言中的可变参数 在 C 语言中实现可变参数需要用到这下面这几个数据类型和函数(其实是宏定义): va_list va_start va_arg va_end 处理动态参数的过程是下面这 4...比如:如果格式化字符串是 %d,那么就从可变参数中提取一个 int 型的数据,如果格式化字符串是 %c,就从可变参数中提取一个 char 型数据; 数据处理结束后,使用 va_end 来释放 arg 变量...for(i = 0; i < num; i++) { val = va_arg(arg, int); printf("%d ", val); } va_end...= NULL ); va_end(arg); printf("\n");} int main(){ char *a = "aaa", *b = "bbb", *c = "ccc";...Step4: 执行 va_end va_end(arg); 把上面这语句,带入下面这宏定义: #define _crt_va_end(ap) ( ap = (va_list)0 ) 宏扩展之后得到

    88820
    领券