アプリケーションC言語の特殊機能

学習の1 va_listの相関関数:

va_listの変数パラメータは、ポインタ型の定義です。

次のように使用されたva_list:

1)第1のva_list型の変数を定義する機能を有し、可変パラメータは、ポインタへのポインタです。

2)第1 va_list型の変数を定義する機能を有し、可変パラメータは、ポインタへのポインタです。

3)次に、変数パラメータを返すのva_arg、2番目のパラメータは、あなたが複数の可変パラメータは、ターンの呼び出しでパラメータを取得するのva_arg場合)(戻したいのva_argのtypeパラメータです。

4)最終的な最終用途を取得するためにマクロ変数パラメータはva_end。

使用時にはva_listの問題に注意を払う必要があります。

1)可変パラメータの種類及び数は、コードによって完全に制御され、それはインテリジェント異なるパラメータの数およびタイプを識別することができません。

2)私たちは、単に変数バッファにリストをコピー、11 Xiangjie各パラメータを必要としない場合は、使用することができますvsprintfの機能を。

3)関数のプロトタイプ変数パラメータを確認するために、コンパイラが不利なプログラミングのトラブルシューティングを、十分に厳格ではないので、高品質なコードを書くために私たちに助長されていません。
コーディング:
#include " STDARG.H " 
の#include <iostreamの> 
する#include <stdio.hの> 静的チャー BUF [ 512 ]。
int型の合計(のchar *のMSG、...); INTメイン(ボイド
{ int型の合計= 0 ;
    文字列str [] = " !%dhello%dworld%d個" ; 
    合計 = SUM(STR、123 )。
    std :: coutの << " 合計= " << <<合計

 


    :: ENDL STDと、
     戻り 0 ; 
} 

int型 SUM(CHAR * MSG、...)
{ 
    va_listのvaList; //は、可変パラメータを有するva_list型の変数を定義するポインタへのポインタです。
    va_startマクロ(vaList、MSG); // アドレスリストの最初の可変パラメータポイントは、アドレスが自動的に増加し、第2のパラメータビットの固定値 
    STD :: MSG COUT << << STD :: ENDL;
     INT sumNum = 0 INTのSTEP、I; 

    vsnprintf(BUF、はsizeof (BUF)、MSG、vaList); 

    のため(I = 0 ;私は< 30 ; I ++は){ 
        のprintf(" %のC " 、[I] BUF)。
    } 
    ながら0!=(STEP =のva_arg(vaList、intは)))// 最初の引数のva_argする可変パラメータのアドレスであり、2番目のパラメータが渡されたパラメータの一種で、戻り値は、アドレスva_listのあります値、タイプ、および$ 
    {                           // 次のポインタを得るのva_arg
         // 、パラメータはva_listのをとることができる0に等しくないある 
        sumNum + = ステップ; 
    } 
    はva_endする(vaListを); // 終了可変引数リストを
    返すsumNumを; 
}

参照:

A。 https://www.cnblogs.com/qiwu1314/p/9844039.html

おすすめ

転載: www.cnblogs.com/uestc-mm/p/11622646.html