2012-02-07 3 views
25

Cでデフォルトパラメータの値を設定することはできますか?たとえば:Cのデフォルトパラメータ

void display(int a, int b=10){ 
//do something 
} 

main(){ 
    display(1); 
    display(1,2); // override default value 
} 

のVisual Studio 2008、-void表示に構文エラーがあることを不満(、int型、B = 10をint型)。これがC言語では合法でない場合、代わりに何がありますか?私にお知らせください。ありがとう。

+1

確かにCでは合法ではありません。Cにもオーバーロードはありません。 – Mysticial

+0

可能な重複:http://stackoverflow.com/questions/1472138/c-default-arguments –

+0

http://stackoverflow.com/questions/2988038/default-values-on-arguments-in-c-functions-and- function-overloading-in-c –

答えて

36

デフォルトのパラメータはC++の機能です。

Cにはデフォルトパラメータはありません。

4

は、あなたがこのことで得ることができます

一つの方法は、NULLポインタを渡した後、NULLが渡された場合、デフォルトの値を設定することであるC.には、デフォルトのパラメータはありません。しかし、これは危険ですが、デフォルトのパラメータが本当に必要な場合を除き、私はそれをお勧めしません。

function (char *path) 
{ 
    FILE *outHandle; 

    if (path==NULL){ 
     outHandle=fopen("DummyFile","w"); 
    }else 
    { 
     outHandle=fopen(path,"w"); 
    } 

} 
9

これは、標準Cの1つの代替では不可能である例えばように、関数名にパラメータを符号化することです

void display(int a){ 
    display_with_b(a, 10); 
} 

void display_with_b(int a, int b){ 
    //do something 
} 
+1

+1。私はまた、[この回答](http://stackoverflow.com/a/1472310/790070)のコメントで練習が好きです。ここでは、関数の名前にはパラメータの数が含まれています。 –

1

ないその方法...

あなたはint配列または可変引数を使用して、関数内の欠落データを埋めることができました。あなたはコンパイル時間のチェックを失う。

関連する問題