9

cの関数に可変数の引数を渡すことはできますか?

4

5 に答える 5

11

次に例を示します。

#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>

int maxof(int, ...) ;
void f(void);

int main(void){
        f();
        exit(EXIT SUCCESS);
}

int maxof(int n_args, ...){
        register int i;
        int max, a;
        va_list ap;

        va_start(ap, n_args);
        max = va_arg(ap, int);
        for(i = 2; i <= n_args; i++) {
                if((a = va_arg(ap, int)) > max)
                        max = a;
        }

        va_end(ap);
        return max;
}

void f(void) {
        int i = 5;
        int j[256];
        j[42] = 24;
        printf("%d\n", maxof(3, i, j[42], 0));
}
于 2010-10-01T03:07:07.873 に答える
6

可変数の引数を受け入れる関数であれば、はい。

于 2010-10-01T03:03:21.660 に答える
0

はい、関数が可変引数を受け入れる場合。独自の変数引数関数を作成する必要がある場合は、引数にアクセスできるva_で始まるマクロがあります。

于 2010-10-01T03:05:22.387 に答える
0

可変引数リストが常に引数リストの最後にあることを確認してください

例:void func(float a, int b, ...)正しい

しかし、void func(float a, ..., int b)有効ではありません

于 2010-10-01T05:58:59.490 に答える
0

「可変個引数関数(Cスタイル)の使用は危険な欠陥であることを考慮する必要があります」とStephaneRolland氏は言います。彼の役立つ投稿はここにあります。

于 2011-11-27T04:44:42.247 に答える