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」、fun(10));
    return 0;
)
…………
コンパイル時fun(10)の呼び出しが間違っています.このコードはC++で間違いないように注意してください.
…………
 
マクロで改善されたコード:
癜include菗デfine 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
[cpp]  view plin copy
ヽoo.ツ       同前 DEFARG(name defval) (((((〹name[0]) ? (name) + 0) : defval)      要点 _f 1(int i)   {       return 2*i   )   同前 f 1(arg 0) _f 1(DEFARG(arg 0, 0)      要点 _f 2(int i, 要点 j)   {       return i + j;   )   同前 f 2(arg 0, arg 1) _f 2(DEFARG(arg 0, 0) DEFARG(arg 1, 1)      要点 main()   {       printf(「%d」、 f 1()       printf(「%d」、 f 1(1)          printf(「%d」、 f 2(,)       printf(「%d」、 f 2(2)       printf(「%d」、 f 2(、 3))       printf(「%d」、 f 2(4, 5))       return 0;   ) 
#include <stdio.h>
#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:
ヘッダファイルがある場合:
get Str.h
萼define getStr()沙氡get Str(「TestFun.txt」)//set default filename in.c void_getsStr(char filename);
get Str.
void_getsStr(charfilename){

)
メール.
萼include「getsStr.h」
void main(){
get Str()
)
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
fromhttp://blog.csdn.net/pipisorry/article/details/25437893