读书人

args_decl()是 和extern 是什么用途

发布时间: 2012-09-12 09:21:30 作者: rapoo

args_decl()是 和extern 是什么用途
最近看到代码 是
extern ListElem *ListFirst ARGS_DECL((List*));
extern ListElem *ListLast ARGS_DECL((List*));
其中listElem 和list是结构体
但是我不知道这个方法声明 为什么要用extern 有什么好处吗?
还有args_decl()这个方法是什么意思呢



[解决办法]
extern 告诉编译器这个标识符(函数名或变量名),来自外部,不在本模块中定义。连接时在其他模块中寻找它的定义。

ARGS_DECL不是一个函数,而是一个宏,和函数参数的设置相关,具体是什么意思还要lz去查查该宏的定义。函数名是ListFirst和ListLast
[解决办法]
应该是著名的 P_ 宏定义,

#if __STDC__ || defined(__cplusplus)
#define ARGS_DECL(s) s
#else
#define ARGS_DECL(s) ()
#endif

这样在 pre-ANSI (K & R)编译器(不支持函数原型)也可以使用
extern ListElem *ListFirst ARGS_DECL((List*));
使用不支持ANSI的编译器就变成
extern ListElem *ListFirst ();
使用支持ANSI的编译器就变成
extern ListElem *ListFirst (List *);

读书人网 >C语言

热点推荐