Здесь присутствует определение:
/*
* Handle an operator command.
* The actual work is done by do_pending_operator().
*/
static void
nv_operator(cap)
cmdarg_T *cap;
....
Этот стиль определения использует список идентификаторов для своих параметров. Стиль устарел (устарел), но все еще может использоваться в C. Идентификаторы названы в списке параметров, а их тип назван в объявлениях, которые следуют непосредственно за декларатором функции, но предшествуют телу функции.
Макрос __ARGS
предназначен для работы с компиляторами, которые не знают о прототипах функций (другая форма для объявления параметров - с именами типов и , объединенными непосредственно в списке параметров функции). Я думаю, что тогда в объявлениях вообще не будет никаких параметров.
Обновление: см. Этот код в vim.h
:
#if defined(MACOS) && (defined(__MRC__) || defined(__SC__))
/* Apple's Compilers support prototypes */
# define __ARGS(x) x
#endif
#ifndef __ARGS
# if defined(__STDC__) || defined(__GNUC__) || defined(WIN3264)
# define __ARGS(x) x
# else
# define __ARGS(x) ()
# endif
#endif