私は C が初めてで、ルーチンの引数をループする必要があります。
void doSmth(char *c, ...) { //how to print all the elements here? }
私はJavaから来たので、これは私にとってまったく新しいことであり、Cでこれを行う方法がわかりませんか?
前もって感謝します
私は C が初めてで、ルーチンの引数をループする必要があります。
void doSmth(char *c, ...) { //how to print all the elements here? }
私はJavaから来たので、これは私にとってまったく新しいことであり、Cでこれを行う方法がわかりませんか?
前もって感謝します
関数宣言は次のようになっているためです。
void doSmth(char *c, ...);
必要なものは可変数引数関数と呼ばれるもので、9.9 から読むことができます。可変数の引数優れたエッセイ チュートリアル
関数 doSmth() を使用したサンプル コードの 4 つのステップ、コメントをお読みください:
//Step1: Need necessary header file
#include <stdarg.h>
void doSmth( char* c, ...){
va_list ap; // vlist variable
int n; // number
int i;
float f;
//print fix numbers of arguments
printf(" C: %s", c);
//Step2: To initialize `ap` using right-most argument that is `c`
va_start(ap, c);
//Step3: Now access vlist `ap` elements using va_arg()
n = va_arg(ap, int); //first value in my list gives number of ele in list
while(n--){
i = va_arg(ap, int);
f = (float)va_arg(ap, double); //notice type, and typecast
printf("\n %d %f \n", i, f);
}
//Step4: Now work done, we should reset pointer to NULL
va_end(ap);
}
int main(){
printf("call for 2");
doSmth("C-string", 2, 3, 6.7f, 5, 5.5f);
// ^ this is `n` like count in variable list
printf("\ncall for 3");
doSmth("CC-string", 3, -12, -12.7f,-14, -14.4f, -67, -0.67f);
// ^ this is `n` like count in variable list
return 1;
}
次のように実行します。
:~$ ./a.out
call for 2 C: C-string
3 6.700000
5 5.500000
call for 3 C: CC-string
-12 -12.700000
-14 -14.400000
-67 -0.670000
Cでは、実際には、固定数の引数の後に可変数の引数が続きます