C言語のデフォルトのパラメータ値の実装
2656 ワード
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; )
ヘッダファイルがある場合:
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
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
int main(){ int a=10 printf('%d %d「fun(a,10),funi(a)」 return 0;
)
結果:20
[cpp] view plin copy
ヽoo.ツ
#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