关于函数参数
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指针是通过压栈传入的,位置相当于第一个参数左边。
[解决办法]
应该函数的参数的个数和类型都可以是未知的。。。