【问题标题】:What does "..." mean in a C function declaration?C 函数声明中的“...”是什么意思?
【发布时间】:2010-03-03 07:32:58
【问题描述】:

这是什么意思?

void message(int x, int y, ...)

我不明白……是什么。 谁能解释一下?

【问题讨论】:

  • 一个相关的值得注意的事情是,在 C 中,空函数参数 () 的含义与 (...) 相同,即函数可以接受任何参数。您需要使用 (void) 声明它不需要任何东西。在 C++ 中 () 意味着它不需要任何东西,正如人们所期望的那样。
  • 空参数列表()(...) 的含义相同。空参数列表意味着该函数采用固定但未指定的参数数量。 (...) 表示它接受可变数量的参数(并且相当无用,因为如果没有至少一个固定参数,该函数将永远无法访问这些参数)。

标签: c function variadic-functions


【解决方案1】:

... 表示可以通过va_arg, va_end and va_start 访问的参数变量列表。

【讨论】:

  • 这里有一些优秀的程序员。你就是其中之一。非常感谢
【解决方案2】:

未指定/可变数量的参数。要处理此类函数,您必须使用 va_list 类型和 va_start、va_arg 和 va_end 函数:

取自here的例子:

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

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

        main(){
                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));
    }

您可以找到更多详情here

【讨论】:

    【解决方案3】:

    您已经在某处定义了一个函数消息,它至少接受两个 int 类型的参数,然后是一些由“...”指示的可选参数。 (printf 是另一个采用可选参数的函数。

    可以使用va_* 函数访问可选参数。

    【讨论】:

      【解决方案4】:

      ... 表示作为数组或参数序列传递的最终参数。

      【讨论】:

        【解决方案5】:

        是变参形式参数。从句法的角度来看,它允许您传递可变数量的参数(至少两个,即 x 和 y,但更多)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-03
          • 2021-11-23
          相关资源
          最近更新 更多