stdarg.h
ライブラリを使用して、引数の数が不明な関数を使用することを学びました。これを使用する簡単な関数を次に示します。
void print(int args,...){
va_list ap;
va_start(ap, args);
int i = 0;
for(i=0; i<args; i++){
printf("%d\n",va_arg(ap, int));
}
va_end(ap);
}
printf
上記のコードに基づいて、どうすれば克服できるかわからない主な制約が 2 つあります。
1) 固定数の引数: つまり、ほぼ vardiac 関数では、引数の数を含める必要があります。しかし、私が書くときprintf
、私はこの番号を含める必要はありません. printf
実際に引数を使用する前に、以前に引数の数を数えたと思いました(最初の文字列の数%を数えることによって)。しかし、繰り返しになりますが、このソリューションは少し効率的ではないと思います。引数の数を数え、この引数をスタックに入れ、最後にすべてを画面に入れます。
2) すべての引数は同じ型でなければなりません: 次の行にあるように: printf("%d\n",va_arg(ap, int));
. したがって、リスト内のすべての引数は同じ型でなければなりません。ご存知のように、これは printf では必須ではありません。整数または文字列と一緒に double を出力できます。これらすべてを文字列のように扱うと、構文が間違っているため、この行はエラーになるはずです。
printf("%d",4); //4 cannot treat by string
printf("%d",'4'); // :)) I think this line is better
上記の2つの問題を説明してください。