一直以为C支持默认参数,原来不支持;但是C++ 支持默认参数;测试代码:
#include <stdio.h> #include <stdlib.h>
//默认参数是在声明时给的,实现时给的话还不行 static void sys_err(char * ,int = 1);
int main(int ac,char ** av){ sys_err(“aaaaa”); return 0; } static void sys_err(char * msg,int ret/* = 1 //不能在这里给默认参数*/){ printf(“%s
“,msg); exit(ret); }
|
如果函数的实现直接写在了调用的前面,及不需要声明,那么就要在函数的实现里给默认参数了,代码如下:
#include <stdio.h> #include <stdlib.h>
static void sys_err(char * msg,int ret = 1){ printf(“%s
“,msg); exit(ret); }
//这里可以再声明一次,不过,声明时就不要给默认值了,否则也错
static void sys_err(char * ,int ); int main(int ac,char ** av){ sys_err(“aaaaa”); return 0; }
|
上面中两个例子好像只有默认参数是c++的,用gcc编译不过去,用g++编译就没问题。
下面给一个c中实现可变参数的例子:
#include <stdio.h> #include <stdarg.h>
double fun(int va_num,...) { double d1=1,d2=2,d3=3; //设置参数的默认值
double tmp; int i; va_list va_args; va_start(va_args,va_num);
for (i=0; i<va_num;++i ) { tmp=va_arg(va_args,double); switch(i) { case 0: d1=tmp; break; case 1: d2=tmp; break; case 2: d3=tmp; break; } } va_end(va_args); printf(“d1:%f d2:%f d3:%f
“,d1,d2,d3); }
int main(void) { fun(0); fun(1,(double)10); fun(2,(double)10,(double)20); fun(3,(double)10,(double)20,(double)30);
return 0; }
|