读书人

关于函数参数,该如何解决

发布时间: 2012-11-05 09:35:12 作者: rapoo

关于函数参数
the C programming language 上说

C/C++ code
采用省略号“,···”表示函数变长参数表的做法也是ANSI标准中新引入的

感觉很奇怪啊,请问可以给我个例子么?

[解决办法]
printf(format, ...);
这个是最常见的,第一个参数是一个格式化字符串,...是后面的参数,他的个数和类型将根据format参数来推断
[解决办法]
printf , 这个函数你很熟悉了吧? 这个就是变长参数, 声明是:
printf(const char* fmt , ...);
其实现的根本就是 函数的调用者和被调用者,谁负责回收 参数所分配的栈空间 的问题.

具体自己百度/谷歌.
[解决办法]
变长参数。

printf scanf 等。
[解决办法]
有个简单例子,参考一下.

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 = 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;}
[解决办法]
为了兼容而弄的东西,自己写代码的时候还是要慎用~
[解决办法]
其实是可以知道参数的个数的,但是就是不确定参数的类型
[解决办法]
自己可以写不定参数的函数,要注意这么几点:必须是_cdecl,调用者负责栈平衡。在程序里面可以通过va_list宏读取参数,头文件<stdarg.h>,我建议使用内敛汇编,效率高。
在class里面成员函数如果是不定参数的话,this指针是通过压栈传入的,位置相当于第一个参数左边。

[解决办法]
应该函数的参数的个数和类型都可以是未知的。。。

读书人网 >C语言

热点推荐