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
- #include
-
- #define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)
-
- int _f1(int i)
- {
- return 2*i;
- }
- #define f1(arg0) _f1(DEFARG(arg0, 0))
-
- int _f2(int i, int j)
- {
- return i + j;
- }
- #define f2(arg0, arg1) _f2(DEFARG(arg0, 0), DEFARG(arg1, 1))
-
- int main()
- {
- printf(%d , f1());
- printf(%d , f1(1));
-
- printf(%d , f2(,));
- printf(%d , f2(2,));
- printf(%d , f2(, 3));
- printf(%d , f2(4, 5));
- return 0;
- }
#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