根據我讀到的有關va_arg
宏,它檢索參數列表指向的下一個參數。有什麼辦法可以選擇我想得到的參數的索引,比如數組索引?va_start as array
例如,我需要做一個操作,我需要調用至少3倍的va_arg
宏,但我希望那些3次檢索相同的參數,而不是列表中的下一個。一種解決方案可能是使用一個函數並傳遞參數,但我不希望這樣。
此外,如果沒有其他宏能夠做到這一點,我怎麼可以通過指針引用數組參數的開始?我知道它不是便攜式的,不是類型安全的等等,只是爲了學習。
這裏是我要如何實現它的示例代碼:
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就被稱爲3次SQLBindParameter函數,我想第2次指向同一個說法,不增加參數列表中的計數成員。
將其返回值分配給一個變量。 – 2012-07-28 06:34:05
什麼是阻止你使用變量? 'SQLPOINTER * tmp = va_arg(argList,SQLPOINTER *);'這樣你就不必爲相同的參數使用var_arg兩次了。你的代碼的另一個問題是C++不保證從左到右評估參數,所以不能保證你的哪個va_arg調用會先發生。 – jahhaj 2012-07-28 06:35:28
沒有大聲笑,我只是問是否有任何宏,讓我作爲一個數組訪問參數列表,它只是爲了知道。謝謝 – ffenix 2012-07-28 06:38:08