C语言中默认参数与可变参数问题

一直以为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;
}


留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据