這是我第一次和va_list
一起工作,所以我不知道自己在做什麼。好吧,基本上我所擁有的是一堆數字(1,2,3,4,5)在函數中,然後我將它們打印出來。這工作正常。我怎樣才能讓我的va_list參數重複自己?
#include <iostream>
#include <cstdarg>
using namespace std;
void ordered(int num1, double list ...);
void main()
{
ordered(5, 1.0, 2.0, 3.0, 4.0, 5.0);
}
void ordered(int num1, double list ...)
{
va_list arguments;
va_start(arguments, num1);
list = va_arg(arguments, double);
cout << "There are " << num1 << " numbers" << endl;
do {
cout << list << endl; // prints out 1 then 2 then 3 then 4 then 5
list = va_arg(arguments, double);
} while (list != 0);
// at this point, list = 0
va_end(arguments);
}
的問題是,經過va_end(arguments);
或者在它之前,我想獲得該程序打印出我的列表中的第二次;基本上再次打印出1,2,3,4,5,而不用再做其他功能。我試圖複製代碼:
va_start(arguments, num1);
do {
cout << list << endl;
list = va_arg(arguments, double);
} while (list != 0);
va_end(arguments);
沒有成功。程序如何再次重複list
,或者不能在同一個函數中重新執行?
其實很好的問題,但我想你也必須重複'va_start'和'va_end'部分。 – RedX 2013-03-27 13:21:36
我試過,但它沒有工作:(好吧,我只是編輯代碼,以顯示 – 2013-03-27 13:24:31
我不認爲該函數的簽名是正確的。'void ordered(int x,double y ...)'意思是'void ordered(int x,double y,...)'。也就是說,可變參數不是一個double類型的序列,而是一個在double參數之後的未知類型序列,同時這意味着你的實現是不正確的(丟棄函數的第二個參數) – 2013-03-27 13:32:46