From Gossip@caterpillar

C++ Gossip: ぃ﹚ま计Variable-length argument

﹚竡ㄧΑΤи礚猭ㄆ眔璶肚患把计计硂娩ざ残ぃ﹚ま计Variable-length argumentㄏノ璶ㄏノぃ﹚ま计眤ゲ斗cstdarg繷郎
#include <cstdarg>

ぃ﹚ま计ㄏノ碭醚ㄓミぃ﹚ま计
  • va_list
疭篈typeva_start va_arg籔va_endエ 栋macro讽把计ㄏノ
  • va_start
币﹍ぃ﹚ま计エ栋
  • va_arg
弄ぃ﹚ま计エ栋
  • va_end
沧ゎぃ﹚ま计エ栋

ぃ﹚ま计眤ㄧΑ﹚竡ㄏノ ... ボ盢ㄏノぃ﹚ま计τぇ玡ゲ斗盢肚患碭ぃ﹚ま计ㄒ
void foo(int, ...);

ㄏノva_argエ栋ま计ず甧眤ゲ斗﹚盢贺戈篈ㄒ
va_arg(num_list, double);

硂祘Αボ絛ㄏノぃ﹚ま计


#include <iostream> 
#include <cstdarg>
using namespace std;

void foo(int, ...);

int main() {
double x = 1.1, y = 2.1, z = 3.9;
double a = 0.1, b = 0.2, c = 0.3;

cout << "把计" << endl;
foo(3, x, y, z);

cout << "せ把计" << endl;
foo(6, x, y, z, a, b, c);

return 0;
}

void foo(int i, ...) {
double tmp;
va_list num_list;

va_start(num_list, i);

for(int j = 0; j < i; j++)
cout << va_arg(num_list, double) << endl;

va_end(num_list);
}

磅︽挡狦

把计
1.1
2.1
3.9
せ把计
1.1
2.1
3.9
0.1
0.2
0.3