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没有错误?这有什么影响?
答案 0 :(得分:2)
第二行是多余的。定义也是一个声明。只要它们没有冲突,您就可以多次声明一个函数或对象。
答案 1 :(得分:0)
虽然在实际(内联)函数定义之后(或之前)给出原型是多余的并且严格不需要,但仍有充分的理由。 gcc有警告
' -Wmissing-prototypes(仅限C和Objective-C)' 如果在没有先前原型的情况下定义全局函数,则发出警告 宣言。即使定义本身也会发出此警告 提供原型。使用此选项可检测全局函数 在头文件中没有匹配的原型声明。 ...
所以为了支持这一点,头文件应该为内联函数定义一个原型。