C语言默认参数值的实现,C语言默认参数值的实现

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\n",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\n",fun(a,10),funi(a));

return 0;

}

结果: 20 20

#include 

#define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)

int_f1(inti)

{

return2*i;

}

#define f1(arg0) _f1(DEFARG(arg0, 0))

int_f2(inti,intj)

{

returni + j;

}

#define f2(arg0, arg1) _f2(DEFARG(arg0, 0), DEFARG(arg1, 1))

intmain()

{

printf("%d\n", f1());

printf("%d\n", f1(1));

printf("%d\n", f2(,));

printf("%d\n", f2(2,));

printf("%d\n", f2(, 3));

printf("%d\n", f2(4, 5));

return0;

}

#include

#define DEFAULT 40 /*默认参数值*/

#define FUN(A) fun(#A##"-") /*用于实现默认参数的宏*/

int f(int n) /*用于实验默认参数的函数*/

{

return printf("%d\n",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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值