Variadic функция f () против f (...) в C - PullRequest
0 голосов
/ 12 июня 2018

В чем разница между следующими двумя определениями функций с переменными числами?

int f()
{
    /* function definition */
}

int f(...)
{
    /* function definition */
}

f() фактически определяется как функции с переменными числами.Я также предполагаю, что <stdarg.h> может быть включено и использовано.

1 Ответ

0 голосов
/ 12 июня 2018

Пустой список параметров в функции объявление указывает, что функция принимает неопределенное количество аргументов (что не совпадает с переменная количество аргументов).Пустой список параметров в функции определение (например, в первом определении f) указывает на то, что функция принимает нет аргументов.Это устаревший стиль, и его не следует использовать - чтобы указать, что функция не принимает параметров, используйте void в качестве списка идентификаторов.

Начиная с C89, у объявления функций переменной должно быть как минимум один фиксированный параметр, за которым следует ....Таким образом, второе определение f также не будет работать.

int f( void ) // f takes no arguments
{
  // do something
}

int f( T fixed, ... ) // one fixed parameter of some type, additional parameters as needed
{
  // do something
}

printf - такой же хороший пример функции с переменными числами в стандартной библиотеке, как и любая другая - ее прототип -

int printf( const char *fmt, ... );
...