• C语言默认參数值的实现


    from http://blog.csdn.net/pipisorry/article/details/25437893

    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 <stdio.h>
    #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


    1. #include <stdio.h>  
    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 <stdio.h>
    #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
  • 相关阅读:
    osds have slow requests
    supervisor 管理 celery
    guacamole部署
    openstack IPV6
    修复VSAN无法看到主机磁盘
    kolla之docker私有仓库创建
    CSS日食与太阳碰撞
    vue-devtools必备工具
    VUE在BODY上绑定enter事件
    VUE输入框显示时自动聚焦
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3797801.html
Copyright © 2020-2023  润新知