如何在原型中用__P调用函数?

时间:2016-11-10 17:54:12

标签: c header-files

我一直在浏览一些头文件,看到有很多这样的函数原型:

returntype some_name __P(arguments);

如果我打电话给这个功能我该怎么办?我是否使用类似

的内容
some_name(arguments);

排除__P,还是有其他方法来调用这些函数?

1 个答案:

答案 0 :(得分:4)

这种原型使用宏__P来允许包含和编译不支持C90原型的旧系统(又名 ansi prototypes )。

在大多数系统上,__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并不重要,包的作者可能已为此目的使用任何名称。