设为首页 加入收藏

TOP

C语言默认参数值的实现
2015-01-22 21:34:18 来源: 作者: 【 】 浏览:70
Tags:语言 默认 数值 实现

?

C语言中没有参数默认值的概念,可以利用宏来模拟参数默认值:

(对于有多个参数的函数,调用时需要将参数列表中的每个 , 写出来,不过这样就可以把默认参数放在非默认参数之前)

?

以下代码在c下是不能通过的:

定义fun():

int fun(int a, int b = 10) ... ...

{ .... ... ... ....

return a+b;

} .. ..

主函数代码: .... ....

int main() ......

{

printf(%d ,fun(10));

return 0;

}

..............................................................

编译时 fun(10) 调用会出错。注意这个代码在C++并不会错。

..............................................................

用宏改进后代码:

#include
#define funi(a) fun( a, 10)
int fun(int a,int b )
{
return a+b;

}
int main()
{
int a = 10;
printf(%d %d ,fun(a,10),funi(a));
return 0;

}

结果: 20 20


?

[cpp] view plaincopy
  1. #include
  2. ?
  3. #define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)
  4. ?
  5. int _f1(int i)
  6. {
  7. return 2*i;
  8. }
  9. #define f1(arg0) _f1(DEFARG(arg0, 0))
  10. ?
  11. int _f2(int i, int j)
  12. {
  13. return i + j;
  14. }
  15. #define f2(arg0, arg1) _f2(DEFARG(arg0, 0), DEFARG(arg1, 1))
  16. ?
  17. int main()
  18. {
  19. printf(%d , f1());
  20. printf(%d , f1(1));
  21. ?
  22. printf(%d , f2(,));
  23. printf(%d , f2(2,));
  24. printf(%d , f2(, 3));
  25. printf(%d , f2(4, 5));
  26. return 0;
  27. }
    #include 
        
         
    #define DEFAULT 40      /*默认参数值*/
    #define FUN(A) fun(#A##-)    /*用于实现默认参数的宏*/
    
    int f(int n)  /*用于实验默认参数的函数*/
    {
     return printf(%d
    ,n);
    }
    int fun(const char *a)    /*确定函数调用的函数,返回值类型要和实际需要调用的f()函数返回值类型一致*/
    {
     int n; /*变量的类型要和f()函数参数的类型一样*/
     if (a[0]=='-') n=DEFAULT;
     else sscanf(a,%d,&n);
    
     return f(n);
    
    }
    int main(void)
    {
     FUN();
     FUN(67);
     return 0;
    }
        

    ps: 如果是有头文件的话: getStr.h #define getStr() _getStr( TestFun.txt );//set default filename in .c
    void _getStr(char filename[]);
    getStr.c void _getStr(char filename[]){
    ... } main.c #include getStr.h void main(){ getStr(); }


    ref:
    http://blog.csdn.net/broook/article/details/7208408 http://nonoob.is-programmer.com/posts/36769.html http://www.myexception.cn/c/232391.html
    http://wenku.baidu.com/view/1ffed5d86f1aff00bed51eea.html http://blog.csdn.net/broook/article/details/7208408
    from http://blog.csdn.net/pipisorry/article/details/25437893
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c 下的通用数据库接口 下一篇C语言获取文件的SHA1哈希值

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: