我一直在浏览一些头文件,看到有很多这样的函数原型:
returntype some_name __P(arguments);
如果我打电话给这个功能我该怎么办?我是否使用类似
的内容some_name(arguments);
排除__P
,还是有其他方法来调用这些函数?
答案 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
并不重要,包的作者可能已为此目的使用任何名称。