今日はCでの可変パラメータの関数呼び出しに連絡しました
参考サイト:HTTPS://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html
コード1:3 int型のパラメータは、呼び出された関数に渡され、呼び出し先関数を出力します
// 可变参数テスト1 の#include <stdio.hに> する#include <STDARG.H> 書式#include < 文字列の.h> の#pragma警告(無効:4996)のボイド TLOG(int型SINFO、...); INT のmain() { int型 X1 = 1 。 int型 ×2 = 2 ; int型 ×3 = 3 ; int型 SINFO = 0 ; TLOG(SINFO、X1、X2、X3)。 システム(「一時停止」)。 リターン0 ; } のボイド TLOG(INT SINFO、...) { int型 SX1 = 0 ; int型 SX2 = 0 ; int型 SX3 = 0 ; // ステップ1:可変引数リストを適用 va_listのsArgv; // ステップ2:の既知の機能に最後のパスの宣言固定パラメータ // これは= 0 SINFOある ;のva_start(sArgv、SINFO) / * 順次読み出さパラメータ固定パラメータSINFO:ステップ3 * / SX1 =のva_arg(sArgv、INT ); SX2 =のva_arg(sArgv、INT ); SX3 va_arg =(sArgv、INT ); (sArgv)にはva_endします。 printf(" 実行出力:[%のD、D %%% D D] \ N- " 、SINFO、SX1、SX2、SX3); } / * 実行出力:[0、123] * /
コード2:呼び出された関数に3送信するchar *型パラメータ、および呼び出し先関数を出力します
1 // 可变参数テスト1 2の#include <stdio.hの> 3の#include <STDARG.H> 4の#include < 文字列・H> 5 6 の#pragma警告(無効:4996) 7 8 ボイド tLog2(CHAR * SINFO 、...); 9 10 のint main()の 11 { 12 のchar * 0009 = " ABC " 。 13 のchar * STR2 = " XYZ " 。 14 のchar * STR3 = " YYH "; 15 16 のchar * SINFO = " 開始" 。 17 18 tLog2(SINFO、STR1、STR2、STR3)。 19 20 システム(" 一時停止" )。 21 リターン 0 。 22 } 23 24 空隙 tLog2(CHAR * SINFO、...) 25 { 26 のchar * S1 =(CHAR *)のmalloc(10 )。 27 のchar *、S2 =(CHAR *)のmalloc(10 ); 28 CHAR * S3 =(チャー *)のmalloc(10 ); 29 30 / * 31である 。arg_ptr STEP 1、変数の定義は、引数リストを指し示す 32 適用可変引数リスト 33がある * / 34で va_listのsArgv; 35 36 / * 37 [ STEP彼は出発点パラメータリストを示したように、図2に示すように、変数は、arg_ptrに初期化されるI 38で 固定パラメータ//最終的な伝達関数によく知られている宣言 39 * / 40 のva_start(sArgv、SINFO); 41は 42である / * 43である 。ステップ3順次SINFOパラメータ固定パラメータを読み込む 44である * / 45 S1は、のva_arg(sArgv = チャー * ;) 46である S2がのva_arg(sArgv = チャー * ;) 47 S3 =のva_arg(sArgv、チャー * ); 48 49 / * 50 。ステップ4、クリーンアップ 51である * / 52である はva_endする(sArgv) 、 53である 54ことである のprintf(" ラン出力:[%はS、%S%S%S] \ N- " 、SINFO、S1、S2、S3); 55 56である }
出力
/ *
:[XYZ YYH ABC、スタート]ラン出力
* /