20190723_Cの変数の関数呼び出し

今日は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 *)のmalloc10 )。
27      のchar *、S2 =(CHAR *)のmalloc10 );
 28      CHAR * S3 =(チャー *)のmalloc10 );
 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、スタート]ラン出力
* /

 

 

おすすめ

転載: www.cnblogs.com/codebeef0911/p/11231346.html