パラメトリック
1228 ワード
C言語変参:VA_LIST
C言語のパラメータを使用する場合は、パラメータを最後のパラメータの位置に配置し、パラメータの前に少なくとも1つの一般的なパラメータを配置する必要があります.
①関数はva_を定義するlistの変数で、この変数はパラメータを指すポインタです.
②呼び出しva_start(va_list ap,char*fmt)アクション、定義されるva_list変数は変数リストを指し、このマクロの2番目のパラメータは1番目の可変パラメータの前のパラメータであり、固定パラメータがパラメータのタイプを示す.%d%s%c
③va_を呼び出すarg(va_list ap,Tpye)操作で各パラメータを取得します.2番目のパラメータは、戻りたいパラメータタイプです(関数に複数の可変パラメータがある場合は、VA_ARGを順次呼び出して各パラメータを取得し、アクセスが完了すると自動的に次のパラメータを指します)/Typeは、パラメータのクラス型です
④va_を呼び出すend()操作、va_をクリアリスト変数
ステップ3でパラメータのタイプを事前に知らずにva_を呼び出すarg()はvaを呼び出すと不便ですstart()操作後、apはすでにパラメータリストを指しており、vprintf(const char*fmt,va_list ap)を呼び出してパラメータを出力したり、vsnprintf(char*str,size_t size,const char*fmt,va_list ap)を呼び出してパラメータを保存して処理したりすることができます.
C言語のパラメータを使用する場合は、パラメータを最後のパラメータの位置に配置し、パラメータの前に少なくとも1つの一般的なパラメータを配置する必要があります.
①関数はva_を定義するlistの変数で、この変数はパラメータを指すポインタです.
②呼び出しva_start(va_list ap,char*fmt)アクション、定義されるva_list変数は変数リストを指し、このマクロの2番目のパラメータは1番目の可変パラメータの前のパラメータであり、固定パラメータがパラメータのタイプを示す.%d%s%c
③va_を呼び出すarg(va_list ap,Tpye)操作で各パラメータを取得します.2番目のパラメータは、戻りたいパラメータタイプです(関数に複数の可変パラメータがある場合は、VA_ARGを順次呼び出して各パラメータを取得し、アクセスが完了すると自動的に次のパラメータを指します)/Typeは、パラメータのクラス型です
④va_を呼び出すend()操作、va_をクリアリスト変数
ステップ3でパラメータのタイプを事前に知らずにva_を呼び出すarg()はvaを呼び出すと不便ですstart()操作後、apはすでにパラメータリストを指しており、vprintf(const char*fmt,va_list ap)を呼び出してパラメータを出力したり、vsnprintf(char*str,size_t size,const char*fmt,va_list ap)を呼び出してパラメータを保存して処理したりすることができます.
/*
* va_list.cpp
*
* Created on: 2017 9 15
* Author: guojing
*/
#include
#include
#include
#include
using namespace std;
int print_arg(char *fmt,...)
{
va_list Arg_List;
char str[100];
va_start(Arg_List,fmt);// va_start , ,
int i=vsnprintf(str,100,fmt,Arg_List);
va_end(Arg_List);
ostringstream str_str;
str_str<