C函数是否支持任意数量的参数?

ale*_*lex 3 c

PHP有一个func_get_args()用于获取所有函数参数,而JavaScript具有该functions对象.

max()在C中写了一篇非常简单的文章

int max(int a, int b) {

    if (a > b) {
        return a;   
    } else {
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

我很确定在大多数语言中你可以为它们max()(或等效的)内置提供任意数量的参数.你能用C语言吗?

我认为这个问题可能是我想要的,但我认为不是.

请记住我还在学习.:)

非常感谢.

And*_*Dog 10

例如,您可以编写一个带参数数量的变量参数函数

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

int sum(int numArgs, ...)
{
    va_list args;
    va_start(args, numArgs);

    int ret = 0;

    for(unsigned int i = 0; i < numArgs; ++i)
    {
        ret += va_arg(args, int);
    }    

    va_end(args);

    return ret;
}    

int main()
{
    printf("%d\n", sum(4,  1,3,3,7)); /* prints 14 */
}
Run Code Online (Sandbox Code Playgroud)

该函数假定每个变量参数都是整数(请参阅va_argcall).

  • 这是'max`的相当奇怪的实现......;) (5认同)

pax*_*blo 5

是的,C具有可变函数的概念,这类似于printf()允许可变数量的参数的方式.

最大函数看起来像这样:

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

static int myMax (int quant, ...) {
    va_list vlst;
    int i;
    int num;
    int max = INT_MIN;

    va_start (vlst, quant);

    for (i = 0; i < quant; i++) {
        if (i == 0) {
            max = va_arg (vlst, int);
        } else {
            num = va_arg (vlst, int);
            if (num > max) {
                max = num;
            }
        }
    }
    va_end (vlst);
    return max;
}

int main (void) {
    printf ("Maximum is %d\n", myMax (5, 97, 5, 22, 5, 6));
    printf ("Maximum is %d\n", myMax (0));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这输出:

Maximum is 97
Maximum is -2147483648
Run Code Online (Sandbox Code Playgroud)

注意quant变量的使用.通常有两种方式来指示参数的结束,可以是前面的计数(前面5)或前面的前哨值.

后者的一个例子是指针列表,NULL作为最后一个传递.由于此max功能需要能够处理整个整数范围,因此哨兵解决方案不可行.

printf功能使用前一种方法,但略有不同.它没有特定的计数,而是使用%格式字符串中的字段来确定其他参数.