QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 664|回复: 2

想问一下三个宏的用法!

[复制链接]
发表于 2005-4-18 19:44:04 | 显示全部楼层 |阅读模式
在stdarg.h中的va_start,va_arg,va_end这三个宏的用法和作用是什么?
发表于 2005-4-18 20:13:20 | 显示全部楼层
是用来处理函数的可变参数的
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()
这个函数,它的定义是这样的:
int printf( const char* format, ...);
它除了有一个参数format固定以外,后面跟的参数的个数和类型是
可变的,例如我们可以有以下不同的调用方法:
printf("%d",i);
printf("%s",s);
printf("the number is %d ,string is:%s", i, s);
va_start,va_arg,va_end就是用来处理...的。

这里有篇文章你可以看看
http://www.yourblog.org/Data/20041/2523.html

详细的用法,我想应该可以在《C Programming Language》或者《C:the Complete Reference》中找到
回复

使用道具 举报

发表于 2005-4-18 22:24:34 | 显示全部楼层
[code:1]void my_free(int cnt, ...) {
  va_list ap;
  va_start ( ap, cnt );
  for ( int i = 0; i < cnt; ++i ) {
    deal_with ( va_arg ( ap, my_arg_type ) );
  }
  va_end ( ap );  
}[/code:1]
具体参考 TCPL 附录 B.7 和 stdarg(3) man page
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 07:15 , Processed in 0.083079 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表