ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
オブジェクト指向のはなし

パラメータが省略できてイイ

解説

たとえば、次のような関数を作ったとします。これは fputs を単純にラッピングしただけです。

SAMPLE
CODE
void PutString( const char *pc, FILE *fp )
{
    fputs( pc, fp );
}
この関数が、次のような使い道だとします。
  • 普段は標準出力に文字列を表示したい
  • 時々、ファイルに対して出力したい場合がある

このようなときは、次のように関数宣言します。

void PutString( const char *pc, FILE *fp=stdout );

これで、第2パラメータの fp はオプションになります。標準出力に表示したい場合は第1パラメータ pc だけ指定して関数を呼ぶと、第2パラメータには上で指定した stdout が自動的にあてがわれます。ファイルに出力したい場合は両方のパラメータを指定して関数呼び出しします。

SAMPLE
CODE
標準出力に表示したい場合:
PutString( "Hello!" ); // 第2パラメータは省略可能


ファイルに出力したい場合:
FILE *fp = fopen( "xyz", "wt" );
if ( fp != 0 ) {
    PutString( "Hello!", fp ); // 両方のパラメータを指定
    ...

省略可能なパラメータは複数あってもかまいません。ただし、これらは後ろの方にまとまっていなければなりません。たとえば、第1パラメータを省略して第2パラメータを指定することはできません。

SAMPLE
CODE
void func1( int n1,   int n2,    int n3=100 ); // OK
void func2( int n1,   int n2=10, int n3=100 ); // OK
void func3( int n1=1, int n2,    int n3     ); // ダメ!
void func4( int n1=1, int n2,    int n3=100 ); // ダメ!

(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)