4

在学习 CI 时,看到它printf可以在传递时接收许多参数。

而且我不知道C如何实现这样的功能,用户可以输入任意数量的参数。我也考虑过指针,但仍然没有好主意。如果有人对此类功能有任何想法,请告诉我。

4

4 回答 4

4

您必须...在函数声明中使用符号作为最后一个参数。

请参阅本教程以了解更多信息:http ://www.cprogramming.com/tutorial/c/lesson17.html

于 2012-07-02T07:29:12.790 回答
4

您需要使用 va_args、va_list 等。看看这个教程。 http://www.cprogramming.com/tutorial/c/lesson17.html

那应该会有所帮助。

于 2012-07-02T07:29:20.080 回答
3

您使用 Cvarargs编写可变参数函数。您需要包含stdargs.h,它为您提供了用于迭代未知大小的参数列表的宏:va_startva_argva_end,使用数据类型:va_list

这是一个几乎没用的函数,它打印出它的可变长度参数列表:

void printArgs(const char *arg1, ...)
{
    va_list args;
    char *str;

    if (arg1) We

        va_start(args, arg1);

        printf("%s ", arg1);

        while ((str = va_arg(argp, char *)) != NULL)
            printf("%s ", str);

        va_end(args);
    }
}

...

printArgs("print", "any", "number", "of", "arguments");

这是一个更有趣的示例,它演示了您可以多次迭代参数列表。

请注意,使用此功能存在类型安全问题;wiki 文章解决了其中的一些问题。

于 2012-07-02T07:31:16.503 回答
3
#include <stdarg.h>
#include <stdio.h>

int add_all(int num,...)
{
    va_list args;
    int sum = 0;
    va_start(args,num);
    int x = 0;
    for(x = 0; x < num;x++)
        sum += va_arg(args,int);
    va_end(args);
    return sum;
}

int main()
{
    printf("Added 2 + 5 + 3: %d\n",add_all(3,2,5,3));
}
于 2012-07-02T07:35:24.117 回答