헤더 파일에서 함수를 "외부"로 만들어야 합니까?
기능을 만들어야 하는가?extern
헤더 파일에 있나요?아니면?extern
디폴트로요?
예를 들어, 다음과 같이 쓸까요?
// birthdays.h
struct person find_birthday(const char* name);
또는 다음과 같습니다.
// birthdays.h
extern struct person find_birthday(const char* name);
C Book에서 :
선언에 외부 스토리지 클래스 지정자가 포함되어 있거나 스토리지 클래스 지정자가 없는 함수(또는 둘 다)의 선언인 경우:
- 파일 범위를 가진 식별자의 가시적인 선언이 이미 존재하는 경우, 결과 링크는 가시적인 선언의 링크와 동일합니다.
- 그렇지 않으면 외부 링크입니다.
따라서 번역 유닛에 선언된 시간이 이 시간뿐이라면 외부 링크가 포함됩니다.
아니요, 헤더 파일에 선언된 함수는 선언할 필요가 없습니다.extern
.
단, 에 정의되어 있는.h
header와 그 다음에#included
배수로.c
파일은 외부로 선언해야 합니다.
이들은 암묵적으로 "extern"으로 선언됩니다.
헤더에 선언된 함수는 일반적으로 (열심히 작업하지 않는 한)extern
개인적으로는 거기에 명시적인 키워드를 표시하고 싶지만 컴파일러에는 필요 없습니다.그것은 독자들에게 그들이 매우 행복하다는 것을 상기시킨다.extern
그리고 인간은 컴퓨터보다 더 틀리기 쉽기 때문에, 나는 상기시키는 것이 도움이 된다고 생각한다.
변수와 함께 사용하는 것이 중요합니다.extern
키워드(initializer 없음)를 지정합니다.따라서 헤더에 선언된 (극소수) 글로벌 변수와의 대칭을 위해, 나는 다음을 사용한다.extern
꼭 필요한 것은 아니지만, 기능도 갖추고 있습니다.
저는 소스코드의 "외부"에 대해 신경 쓰지 않지만, 어떤 사람들은 신경써요.제 생각에는 변수 앞에 외관이 있지만 함수가 없는 것은 어떤 것이 함수인지, 어떤 것이 변수인지(아마도 함수 포인터 포함) 시각적으로 더 명확해집니다.아마 .h 파일의 선언이 어떻게 작성되고 메인 .c 파일과 어떻게 관련되어 있는지에 따라 많은 부분이 달라질 것입니다.저는 보통 .h 파일 프로토타입을 입력하고 나서 .c 파일에 복사/붙여넣고 함수 본문(프로토타입 끝에 세미콜론 스트라이크)을 추가합니다.따라서 복사/붙여넣기 후에는 "extern"을 헤더 파일에 추가하거나 메인 .c 파일에서 입력해야 합니다.
언급URL : https://stackoverflow.com/questions/3367124/should-functions-be-made-extern-in-header-files
'programing' 카테고리의 다른 글
요청의 URL에서 최대 재시도 횟수를 초과했습니다. (0) | 2023.01.04 |
---|---|
SQL(MariaDB)에서 SELECT 문구가 중복되지 않도록 하는 방법 (0) | 2023.01.04 |
Symfony2에서 양식 필드의 기본값을 설정하는 방법 (0) | 2023.01.04 |
문자열이 여러 접두사 중 하나로 시작되는지 확인하려면 어떻게 해야 합니까? (0) | 2023.01.04 |
Mysqli bind_param을 날짜 및 시간 열과 함께 사용하시겠습니까? (0) | 2023.01.04 |