- 论坛徽章:
- 0
|
阅读 wget 源代码中的一个问题。
原帖由 "zearth" 发表:
以setval函数的声明来说,在ANSI C中应该是
int setval (const char *, const char *);
而在以前的K&R C语法中,应该是
int setval();
有些老的编译器只能识别K&R C的语法,wget中定义的PARAMS
就是为了使..........
用于和早期的C编译器兼容。早期的C编译器没有函数原型这个概念,因此对于函数声明的参数表都是空的,到了后期的C编译器以及C++编译器都要求使用完整的函数原型,那么参数表就不能是空的了。
这里如果定义了宏PROTOTYPES,则表示使用新的函数原型,那么一个函数声明:
extern int func PROTO_LIST((int, void *));
就被扩展成:
extern int func (int, void *);
注意PROTO_LIST中应该有两层括号,否则函数参数会被认为是宏参数而出错。
如果没有定义PROTOTYPES,那么上面的函数声明就被扩展成:
extern int func ();
由此符合早期C编译器的要求。 |
|