博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言默认參数值的实现
阅读量:4925 次
发布时间:2019-06-11

本文共 2050 字,大约阅读时间需要 6 分钟。

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

}

结果: 20 20

[cpp] 
  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\n", f1());  
  20.     printf("%d\n", f1(1));  
  21.   
  22.     printf("%d\n", f2(,));  
  23.     printf("%d\n", f2(2,));  
  24.     printf("%d\n", f2(, 3));  
  25.     printf("%d\n", f2(4, 5));  
  26.     return 0;  
  27. }  
#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

转载于:https://www.cnblogs.com/blfshiye/p/3797801.html

你可能感兴趣的文章
jpa 多对多关系的实现注解形式
查看>>
Android开发——View绘制过程源码解析(一)
查看>>
Quartz和TopShelf Windows服务作业调度
查看>>
让ie9之前的版本支持canvas
查看>>
排序规则
查看>>
percent的用法
查看>>
中文词频统计
查看>>
Hibernate三种状态详解
查看>>
判断一个数是否是2^N次方
查看>>
Java Win自动环境配置脚本
查看>>
springMVC+Java验证码完善注册功能
查看>>
在虚拟机中的Linux系统搭建ftp服务器,使用nginx代理,实现外网访问ftp服务器的文件——centos6.5系统中的nginx安装及配置...
查看>>
css3媒体查询简单实例
查看>>
java-properties配置文件
查看>>
算法学习-哈希表
查看>>
python操作mysql
查看>>
javascript 学习1
查看>>
Angular应用架构设计-3:Ngrx Store
查看>>
<a>标签文件下载文件名乱码问题
查看>>
HTTP抓包
查看>>