?
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