繁体   English   中英

为什么C头文件中的函数声明和函数定义具有相同的名称(来自Redis源)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM