谁能教教我怎样实现函数参数个数不定?谢谢。

mben 2003-10-21 01:01:46
r.t.
...全文
40 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ceran 2003-10-21
  • 打赏
  • 举报
回复
函数重载太麻烦!
brxren 2003-10-21
  • 打赏
  • 举报
回复
可以用函数的重载啊,难道不可以吗?
david08 2003-10-21
  • 打赏
  • 举报
回复
Please refer to the follow code (sample for you)!

logMsg(const char* szFormat, ...)
{
char szMsgStr[256];
time_t tim;
struct tm lt;
va_list argptr;

va_start(argptr, szFormat);
vsprintf(szMsgStr, szFormat, argptr);
va_end(argptr);
writeLogMsg(szMsgStr); //my function
}


pxwzd123 2003-10-21
  • 打赏
  • 举报
回复
Andy84920 2003-10-21
  • 打赏
  • 举报
回复
void foo( parm_list, ...);

void foo( ...);

第一种形式为特定数目的函数参数提供了声明.当函数调用时,对于与显示声明的参数
相对应的实参进行类型检查,而与活略号对应的实参则挂起类型检查.
参数后面的逗号是可选的.

第二种形式则用于无法列出传递给函数的所有实参的类型和数目时.省略号挂起类型
检查机制.
program2100 2003-10-21
  • 打赏
  • 举报
回复
通过va_list
oyd 2003-10-21
  • 打赏
  • 举报
回复
原理就是声明一个类似
int func ( char *fmtstr, ...)的函数
然后在函数中判断fmtstr的下一个参数的类型如float,然后将fmtstr的地址+sizeof(float),得出的值作为那个float参数的地址。以此类推。
但是手工这么实现有点太繁了,又容易出错,所以一般的编译器实现中有一些宏来完成这些动作。就是njuhuangmy(茶) 所说va_list之类的啦。
dddd8888 2003-10-21
  • 打赏
  • 举报
回复
用函数指针
njuhuangmy 2003-10-21
  • 打赏
  • 举报
回复
看 帮助 !

va_list
soulz 2003-10-21
  • 打赏
  • 举报
回复
觉得有缺省参数就可以了,为什么一定要函数参数不定呢?

69,369

社区成员

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

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