NOTHING
あなたが本当にその議論を省略したいということを意味するならば、私はあなたがそれを概説した方法でそれが可能であるとは思わない。
これがCで通常行われる方法は、可変引数リストを使用することです。つまりflag
、残りの引数を決定するので、が最初になるように再定式化する必要があります。
void func(int flag, ...)
{
va_list args;
int num, othernum;
FILE *file;
va_start(args, flag);
if(flag == 1)
{
num = va_arg(args, int);
file = va_arg(args, FILE *);
}
else if(flag == 2)
{
num = va_arg(args, int);
othernum = va_args(args, int);
}
va_end(args);
/* Inspect `flag` again, and do things with the values we got. */
}
次に、次のような関数を使用できます。
func(1, 42, a_file);
また
func(2, 17, 4711);
もちろん、これには多くの注意が必要です。これは、呼び出しで提供された値を関数が期待する値に一致させるために、コンパイラーから多くの助けを得ることができなくなったためです。
代わりに、適切な引数を使用して一般的な「ワーカー」関数を呼び出す、別のトップレベル関数に再構築することをお勧めします。
func_mode1(42, a_file);
func_mode2(17, 4711);
func()
次に、これらは適切な値で呼び出すことができ、flag
適用されない引数(NULL
未使用のファイルポインタなど)に適切なデフォルトを入力します。