Этот вид прототипа использует макрос __P
, чтобы включить и составление на очень старых системах, которые не поддерживают С90 прототипы (ака прототипы ANSI).
В большинстве систем, аргумент к __P
макро расширяется до списка аргументов, как показано ниже:
#ifdef __USING_STONE_AGE_COMPILER__
#define __P(args) ()
#else
#define __P(args) args
int some_name __P((int argc, char *argv[]));
На устаревших систем, указанное заявление, расширяется до int some_name();
в то время как она расширяется до полного прототипа иным образом: int some_name(int argc, char *argv[]);
Просто игнорируйте макрос __P
и используйте синтаксис some_name(arguments);
для вызова функции. Также обратите внимание, что имя макроса __P
не имеет значения, автор пакета мог использовать любое имя для этой цели.
Не могли бы вы связать файл заголовка, который включает в себя, чтобы мы могли взглянуть на него? –
Где вы нашли такие объявления? Вы можете показать его? Вероятно, это макрос, расширяющийся к чему-то. – Banex
Это ссылка на файл заголовка [Ссылка] (web.mit.edu/~jik/sipbsrc/i386_nbsd1/webster/src/server/dbm/PORT/sys/db.h/) У этого есть что-то вроде void \t __dbpanic __P ((DB * dbp)); как я могу назвать __dbapanic? Просто __dapanic (* dbp) или каким-то другим способом –