![](/img/trans.png)
[英]Can I use extern function declaration on a C Header which is also used for the C source file which contains the function definition?
[英]Why can a function declaration and function definition with same name in the C header file (from redis source)
朋友们,在探索Redis的源代码时,在sds.h中,我看到重复的声明(定义)函数如下:
static inline size_t sdslen(const sds s) {
struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
return sh->len;
}
size_t sdslen(const sds s);
为什么有两个sdslen没有错误? 那有什么作用?
第二行是多余的。 定义也是声明。 您可以多次声明一个函数或对象,只要它们不冲突即可。
尽管在实际的(内联的)函数定义之后(或之前)提供原型是多余的,并且严格不需要,但仍有充分的理由。 gcc有警告
'-Wmissing-prototypes(仅C和Objective-C)'如果在没有先前原型声明的情况下定义了全局函数,则发出警告。 即使定义本身提供了原型,也会发出此警告。 使用此选项可以检测在头文件中没有匹配原型声明的全局函数。 ...
因此,为了支持这一点,头文件应为内联函数定义一个原型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.