Chinaunix首页 | 论坛 | 博客
  • 博客访问: 571109
  • 博文数量: 32
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1492
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-09 13:38
文章分类

全部博文(32)

文章存档

2011年(1)

2009年(1)

2008年(30)

我的朋友

分类: C/C++

2008-03-03 12:47:57

一直以为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\n",msg);
    exit(ret);
}

 

如果函数的实现直接写在了调用的前面,及不需要声明,那么就要在函数的实现里给默认参数了,代码如下:

 

#include <stdio.h>
#include <stdlib.h>

static void sys_err(char * msg,int ret = 1){
    printf("%s\n",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 \n",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;
}

阅读(11892) | 评论(1) | 转发(1) |
0

上一篇:没有了

下一篇:js获取cookie

给主人留下些什么吧!~~

Q__Q112015-05-07 21:05:17

c语言的参数
http://www.alex999.com/c_language_parameters.html