programing

헤더 파일에서 함수를 "외부"로 만들어야 합니까?

minecode 2023. 1. 4. 20:21
반응형

헤더 파일에서 함수를 "외부"로 만들어야 합니까?

기능을 만들어야 하는가?extern헤더 파일에 있나요?아니면?extern디폴트로요?

예를 들어, 다음과 같이 쓸까요?

// birthdays.h
struct person find_birthday(const char* name);

또는 다음과 같습니다.

// birthdays.h
extern struct person find_birthday(const char* name);

C Book에서 :

선언에 외부 스토리지 클래스 지정자가 포함되어 있거나 스토리지 클래스 지정자가 없는 함수(또는 둘 다)의 선언인 경우:

  • 파일 범위를 가진 식별자의 가시적인 선언이 이미 존재하는 경우, 결과 링크는 가시적인 선언의 링크와 동일합니다.
  • 그렇지 않으면 외부 링크입니다.

따라서 번역 유닛에 선언된 시간이 이 시간뿐이라면 외부 링크가 포함됩니다.

아니요, 헤더 파일에 선언된 함수는 선언할 필요가 없습니다.extern.

단, 에 정의되어 있는.hheader와 그 다음에#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

반응형