C函数声明中的“...”是什么意思?

7
这是什么意思?
void message(int x, int y, ...)

我不理解什么是...。有人可以解释一下吗?


1
值得注意的是,在 C 语言中,空函数参数 () 的意思与 (...) 相同,即函数可以接受任何参数。你需要使用 (void) 来表示它不接受任何参数。而在 C++ 中,() 表示函数不接受任何参数,正如人们所期望的那样。 - Tronic
2
一个空的参数列表 ()(...) 不是同一个意思。一个空的参数列表表示函数接受固定但未指定数量的参数。(...) 表示它接受可变数量的参数(并且相当无用,因为函数将永远无法访问这些参数,除非至少有一个固定参数)。 - caf
5个回答

8

一些优秀的程序员在这里。 你是其中之一。 非常感谢。 - ambika

5

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

以下示例来自此处

  #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));
    }

您可以在这里找到更多详细信息。该文档与C语言中的可变参数相关。


3
你在某处定义了一个名为 message 的函数,它至少需要两个 int 类型的参数,然后是一些由“...”表示的可选参数。(printf 是另一个接受可选参数的函数。)
可选参数可以使用 va_* 函数访问。

2

...表示将最后一个参数作为数组或一系列参数传递。


0
这是一个可变参数形式参数。从语法角度来看,它允许你传递可变数量的参数(至少两个,即x和y,但也可以更多)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接