首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C函数支持任意数量的参数吗?

C函数支持任意数量的参数吗?
EN

Stack Overflow用户
提问于 2010-09-09 21:46:11
回答 7查看 1.9K关注 0票数 4

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

我用C语言写了一个非常简单的max()

代码语言:javascript
复制
int max(int a, int b) {
    
    if (a > b) {
        return a;   
    } else {
        return b;
    }
}

我敢肯定,在大多数语言中,您可以为其内置的max() (或等效的)提供任意数量的参数。你能用C语言做到这一点吗?

我以为这个question可能就是我想要的,但我不这么认为。

请记住,我也还在学习。:)

非常感谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-09-09 21:56:04

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

代码语言:javascript
复制
#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 */
}

该函数假定每个变量参数都是整数(请参阅va_arg调用)。

票数 11
EN

Stack Overflow用户

发布于 2010-09-09 21:55:35

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

最大值函数将如下所示:

代码语言:javascript
复制
#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;
}

这将输出以下内容:

代码语言:javascript
复制
Maximum is 97
Maximum is -2147483648

注意quant变量的使用。通常有两种方法来指示参数的结束,要么是前面的计数( 5),要么是后面的标记值。

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

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

票数 5
EN

Stack Overflow用户

发布于 2010-09-09 21:57:41

实际上,这是两个问题。首先,C99只要求一个C实现可以处理至少:

  • 127一个函数中的参数定义
  • 127一个函数中的参数调用

现在,对于你真正的问题,是的,在C99中有所谓的可变函数和宏。声明的语法是参数列表中的...。可变函数的实现与stdarg.h头文件中的宏一起使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3677136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档