マクロについて読んだところによるとva_arg
、引数リストが指す次の引数を取得します。配列インデックスのように、取得したい引数のインデックスを選択する方法はありますか?
たとえば、va_arg
マクロを少なくとも 3 回呼び出す必要がある操作を実行する必要がありますが、それらの 3 回でリストの次の引数ではなく同じ引数を取得する必要があります。1 つの解決策は、関数を使用して引数を渡すことですが、私はそれを望んでいません。
また、これを実行できるマクロが他にない場合、ポインターで配列引数の先頭を参照するにはどうすればよいですか? 移植性がなく、タイプセーフではないことなどを知っています。学習のためだけに。
これを実装する方法のサンプルコードを次に示します。
bool SQLBase::BindQuery (char* query, int NumArgs, ...)
{
va_list argList;
va_start(argList, NumArgs);
SQLPrepare (hstmt, query, SQL_NTS);
for (int x = 0; x < NumArgs; x++)
{
SQLBindParameter (hstmt, (x+1), GetTypeParameter (va_arg(argList, SQLPOINTER*), SQL_C_CHAR, SQL_CHAR, 10, 0, va_arg(argList, SQLPOINTER*), va_arg(argList, SQLLEN), &recvsize[x]);
}
va_arg は SQLBindParameter 関数に対して 3 回呼び出され、最初の 2 回は同じ引数を指し、引数リストのカウント メンバーを増やしません。