2014-03-27 3 views
1

친구가 sds.h에서 Redis의 소스 코드를 탐색하면서 다음과 같이 중복 선언 (정의) 함수를 볼 수 있습니다. :왜 함수 선언과 함수 정의를 C 헤더 파일 (redis 소스에서)

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

실제 (인라인) 함수 정의 다음에 (또는 앞에서) 프로토 타입을 제공하는 것이 불필요하며 엄격하게 필요하지는 않지만 여전히 그럴만 한 이유가 있습니다. GCC는 경고

'-Wmissing - 프로토 타입 (C와 목표 - C 전용)'전역 함수는 이전의 프로토 타입 선언하지 않고 정의 된 경우 경고 있습니다. 정의 자체가 인 경우에도이 경고가 발행됩니다. 헤더 파일에 일치하는 프로토 타입 선언이없는 전역 함수 을 검색하려면이 옵션을 사용합니다. ...

그래서이를 지원하기 위해 헤더 파일은 인라인 함수의 프로토 타입을 정의해야합니다.

+0

대단히 감사합니다. – shahuwang

관련 문제