关于函数参数

ioaq 2012-10-03 02:24:10
the C programming language 上说
采用省略号“,···”表示函数变长参数表的做法也是ANSI标准中新引入的

感觉很奇怪啊,请问可以给我个例子么?
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ioaq 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

有个简单例子,参考一下.

C/C++ code
#include <stdarg.h>

void func_with_var_args(int argc, ...)
{
va_list va;
const char *s;

if (argc == 1)
{
va_start(va, argc);
s ……
[/Quote]

原来是这个东西,从来没用过啊。。。。
suixinpiaodang 2012-10-04
  • 打赏
  • 举报
回复
应该函数的参数的个数和类型都可以是未知的。。。
swp543210 2012-10-04
  • 打赏
  • 举报
回复
自己可以写不定参数的函数,要注意这么几点:必须是_cdecl,调用者负责栈平衡。在程序里面可以通过va_list宏读取参数,头文件<stdarg.h>,我建议使用内敛汇编,效率高。
在class里面成员函数如果是不定参数的话,this指针是通过压栈传入的,位置相当于第一个参数左边。
魔笛手 2012-10-04
  • 打赏
  • 举报
回复
其实是可以知道参数的个数的,但是就是不确定参数的类型
卖萌de猫 2012-10-03
  • 打赏
  • 举报
回复
为了兼容而弄的东西,自己写代码的时候还是要慎用~
JiMoKuangXiangQu 2012-10-03
  • 打赏
  • 举报
回复
有个简单例子,参考一下.

#include <stdarg.h>

void func_with_var_args(int argc, ...)
{
va_list va;
const char *s;

if (argc == 1)
{
va_start(va, argc);
s = va_arg(va, char *);
printf("%s\n", s);
va_end(va);
}
else if (argc == 2)
{
va_start(va, argc);
s = va_arg(va, char *);
printf("%s", s);
printf("%d\n", va_arg(va, int));
va_end(va);
}
}

int main(void)
{
func_with_var_args(1, "VarArgs 11");
func_with_var_args(2, "VarArgs 21, ", 22);

getch();
return 0;
}
ioaq 2012-10-03
  • 打赏
  • 举报
回复
额。。。。。 看了以上几位的回答,我想是我误会了书上的意思
我还以为可以自己写一个函数,让函数的参数不确定呢。。。。。
armsword 2012-10-03
  • 打赏
  • 举报
回复
变长参数。

printf scanf 等。
firendlys 2012-10-03
  • 打赏
  • 举报
回复
printf , 这个函数你很熟悉了吧? 这个就是变长参数, 声明是:
printf(const char* fmt , ...);
其实现的根本就是 函数的调用者和被调用者,谁负责回收 参数所分配的栈空间 的问题.

具体自己百度/谷歌.
羽飞 2012-10-03
  • 打赏
  • 举报
回复
printf(format, ...);
这个是最常见的,第一个参数是一个格式化字符串,...是后面的参数,他的个数和类型将根据format参数来推断

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧