printf関数の宣言でLinuxの「マニュアルの男」で、例えば、C言語の関数の変数パラメータの私のほとんど理解について話をします。
printf関数の宣言は以下の通りである:INTのprintf(CONST文字*フォーマット、...);典型的には、宣言関数は、少なくとも一つの共通パラメータを必要とする関数パラメータリストのこの形で、後者は省略記号を省略表していない、が、関数プロトタイプ一部。
可変パラメータの実装:C言語ヘッダファイル「STDARG.H」は、データタイプと三つのパラメータva_listのマクロ(va_startマクロ、のva_argとはva_end)を提供します。va_listの前記次の文のtypedefチャー* va_listの、最初のオプションのパラメータを指し、のva_argは、次のパラメータVPパラメータリストに現在のパラメータやポイントのパラメータのリストを返し、はva_endインデックスポインタがNULL VPなるように、VPのva_startのva_list型。
私の下には検証以上の方法にはいくつかのC / C ++のコードを書かれています:
例:
// 求参数列表中可变参数的和(可指定个数)
//#include <iostream>
//#include <cstdarg>
#include <stdio.h>
#include <stdarg.h>
//求n个可变参数的和
int sum(int n, int j, ...)
{
printf ("n = %d, j = %d\n", n, j);
int s = 0;
int i = 0;
va_list vp;
va_start(vp, j); //使得vp指向第一个可选参数
for(i = 0; i < n; ++i)
{
int va = va_arg(vp, int);
//s += va_arg(vp, int);
s += va;
printf ("vp_arg() = %d\n", va);
printf ("s = %d\n", s);
}
va_end(vp);
return s;
}
int main()
{
int j = sum(4,3,2,3,4,5,6);
printf ("j = %d\n", j);
return 0;
}
結果:
N = 4、J = 3
vp_arg()= 2
、P = 2
vp_arg()= 3
、P = 5
vp_arg()= 4
、P = 9
vp_arg()= 5
、S = 14
、J = 14
分析:
関数の和関数は最初のn及び可変パラメータを見出すことである、「和(4,3,2,3,4,5,6)」への関数呼び出しは、値は可変パラメータの最初の4つであるべき戻ってすなわち、2 + 3 + 4 + 5 = 14です。
出力結果:J = 14