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

时间:2011-11-14 04:55:50

标签: c function mingw printf declaration

我正在浏览MinGW附带的stdio.h头文件,并注意到printf函数声明如下:

int printf (const char *__format, ...)
{
    //body omitted
}

我之前从未见过功能参数列表中的省略号,所以我试了一下。它编译并运行没有错误。那么,“......”的目的是什么?

3 个答案:

答案 0 :(得分:5)

这意味着该函数是一个可变参数函数,它接受可变数量的参数:

http://en.wikipedia.org/wiki/Variadic_function

printf()本身可能是可变函数的最好例子。

答案 1 :(得分:2)

它通知编译器该函数具有可变参数列表。这是一项仅适用于__cdecl调用约定的功能。它允许调用者在最后一个固定参数之后指定它想要的任何参数值,因为调用者将在函数退出时清理参数。变量参数通常用于printf样式函数,其中可变参数值的解释取决于固定参数值的值(例如将单个可变参数与__format参数中的每个格式说明符匹配)。

答案 2 :(得分:1)

它用于允许可变数量的参数或未指定类型的参数,如printf()所做的那样。允许可变数量的argumnets的函数称为Variadic Function

使用va_startva_listva_endva_arg

访问变体变量

Variable number of Arguments (...)

Sample Implementation:

#include <stdarg.h>

double average(int count, ...)
{
    va_list ap;
    int j;
    double tot = 0;
    va_start(ap, count); //Requires the last fixed parameter (to get the address)
    for(j=0; j<count; j++)
        tot+=va_arg(ap, double); //Requires the type to cast to. Increments ap to the next argument.
    va_end(ap);
    return tot/count;
}

希望这有帮助。