可変関数、可変パラメータ
可変パラメータvariableparentの処理変数を受け入れる関数を作成します.
int ft_printf(const char *c, ...);
int sum(int count, ...);
パラメータの",..."部分的に可変因子を受け入れます.
. apを宣言し、apを別の関数に渡すと
vaリストapで交換するだけで、エラーを探すためにうろうろします.
.
Last=前の固定パラメータ
ex) gcc規格cによれば、資料型がintより小さい場合はint、floatまたはdoubleを用いて読み取る.
char, bool, short -> int
float -> double
例外として、visualstdioでcharを読み込む場合にのみ、charを直接読み込むことができます.
https://dojang.io/mod/page/view.php?id=578
.
va start()で初期化し、va arg()でアクセスし、va end()で終わり、コピーも同様のプロセスを経験します.
まだ使ったことがありません.
.
//なぜ1つの関数で発生するのですか?apを他の関数に渡すと影響を受けますか?
. リファレンスリンク
man 3 stdarg - https://linux.die.net/man/3/stdarg
https://dojang.io/mod/page/view.php?id=578
https://norux.me/19
https://jangsalt.tistory.com/entry/可変ファクタ-vamart-vaend-vaarg-valist
int ft_printf(const char *c, ...);
int sum(int count, ...);
パラメータの",..."部分的に可変因子を受け入れます.
.
va_list
可変パラメータポインタを格納する構造体va_list ap;
(argument pointer)void test(va_list *ap);
パラメータをポインタに設定します.test(&ap);
アドレスに移動vaリストapで交換するだけで、エラーを探すためにうろうろします.
.
void va_start(va_list ap, last);
apを最初の可変パラメータアドレスに変更します.Last=前の固定パラメータ
ex)
va_start(ap, c);
. type va_arg(va_list ap, type);
タイプに応じてapを読み出し、次の可変パラメータ位置に移動します.char, bool, short -> int
float -> double
例外として、visualstdioでcharを読み込む場合にのみ、charを直接読み込むことができます.
https://dojang.io/mod/page/view.php?id=578
.
void va_copy(va_list dest, va_list src);
srcをdestにコピー(va startに初期化されていません)va start()で初期化し、va arg()でアクセスし、va end()で終わり、コピーも同様のプロセスを経験します.
まだ使ったことがありません.
.
void va_end(va_list ap);
1つの関数では、va startで始まり、va endで終わるべきです.//なぜ1つの関数で発生するのですか?apを他の関数に渡すと影響を受けますか?
.
man 3 stdarg - https://linux.die.net/man/3/stdarg
https://dojang.io/mod/page/view.php?id=578
https://norux.me/19
https://jangsalt.tistory.com/entry/可変ファクタ-vamart-vaend-vaarg-valist
Reference
この問題について(可変関数、可変パラメータ), 我々は、より多くの情報をここで見つけました https://velog.io/@jwo1024/가변함수-가변인자variable-argumentテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol