程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言默認參數值的實現

C語言默認參數值的實現

編輯:關於C語言

 

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved