以下のコードには、指定された整数値のリストの合計を計算する 2 つの関数が含まれています。
#include <iostream>
#include <stdarg.h>
using namespace std;
int sum_1 ( int number_of_values, ... )
{
va_list arguments;
va_start ( arguments, number_of_values );
int sum = 0;
for ( int i = 0; i < number_of_values; i++ )
{
sum += va_arg ( arguments, int );
}
va_end ( arguments );
return sum;
}
int sum_2 ( int number_of_values ...)
{
int sum = 0;
for ( int i = 0; i < number_of_values; i++ )
sum += *( &number_of_values + i + 1 );
return sum;
}
int main()
{
cout << sum_1(3, 1, 2, 3) << endl; //prints 6
cout << sum_2(3, 1, 2, 3) << endl; //prints 6
}
sum_1
va_list
アプローチを使用sum_2
し、提供された変数のアドレスを使用して、number_of_values
他の値を見つけてそれらを加算します。
では、これら2つのアプローチの違いは何ですか? どちらを使用しますか?2 番目のほうが短く見えるのでva_list
、 、va_start
、va_art
およびを定義するのに何を注意しましたva_end
か?