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

时间:2014-03-27 15:55:53

标签: c redis

朋友们,在探索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没有错误?这有什么影响?

2 个答案:

答案 0 :(得分:2)

第二行是多余的。定义也是一个声明。只要它们没有冲突,您就可以多次声明一个函数或对象。

答案 1 :(得分:0)

虽然在实际(内联)函数定义之后(或之前)给出原型是多余的并且严格不需要,但仍有充分的理由。 gcc有警告

  

' -Wmissing-prototypes(仅限C和Objective-C)'        如果在没有先前原型的情况下定义全局函数,则发出警告        宣言。即使定义本身也会发出此警告        提供原型。使用此选项可检测全局函数        在头文件中没有匹配的原型声明。        ...

所以为了支持这一点,头文件应该为内联函数定义一个原型。