2010-03-11 2 views
8

저는 임베디드 시스템으로 작업 중이며 HW- 인터페이스 인 #define 매크로를 사용하고 있습니다. 나는이 모든 것들을 OOP를위한 별도의 파일에 넣고 싶지만, 나는 #include에 대한 최선의 방법을 모른다. 나는 그것들을 모두 .c 파일에 넣은 다음 포함시켜야합니까? 이것들을 .h 파일에 넣는 것은 어리석은 것처럼 보입니다.이 함수와 유사한 #define은 어디에서 모두 C에 넣을 수 있습니까?

+2

FWIW : "기능"이 아닌 "매크로"라고합니다. – dmckee

+1

.h 파일에 모두 넣는 것이 어리석은 이유는 무엇입니까? – FrustratedWithFormsDesigner

+0

@dmckee : 표준에서 사용 된 용어 인 "객체와 유사한 매크로"와 달리 "차이점"을 분리하여 "함수와 유사한 매크로"라고 부를 수 있습니다. –

답변

13

.h 파일에 이상한 점이 없습니다.

+1

네, 이것은 표준 관행입니다. – caf

+0

음, 일반적으로는 .h 파일에있는 함수 프로토 타입과 .c 파일에있는 함수 프로토 타입입니다. 이 경우에는 .h 파일에 구현을 넣을 것입니다. 일반적으로 누군가가 찾아야합니다. – Tristan

+3

@Tristan : 매크로가 함수에 대해 사실 인 것은 사실이 아닙니다. 헤더 파일에 인라인 함수가 상주하는 것도 일반적입니다. – Christoph

7

이들은 .h 개의 파일에 있어야합니다. 다른 옵션은 .c 파일이며, .c 파일을 포함하려면 파일을 사용해야합니다. 사람마다 매우 혼란 스러울뿐만 아니라 모든 .c 파일이 파일에 직접적으로 해당한다는 표준 가정을 사용하면 makefile을 혼란스럽게합니다. .o 파일을 컴파일합니다.

정상적인 패턴은 .h 파일이 다른 장소 (특히 여러 개의 다른 장소)에 포함되어 있고 .c 파일이 개체 파일로 한 번 컴파일 된 파일을위한 것입니다.

  • 기능 프로토 타입
  • 상수 선언
  • 글로벌 변수
  • 인라인 함수 정의 부 extern 선언
  • 유형 정의
  • 과 : 따라서

    , 다음 사항은 일반적으로 .h 파일로 이동 매크로 정의 (예 : 묻고있는 것) 약. 오브젝트 코드로 컴파일 및

"의 사건을 연결됩니다

  • 글로벌 변수 정의
  • 기능 정의 : 반대로

, 다음 사항은 일반적으로 .c 파일로 이동 함수 정의는 .c 개로 제한됩니다. "는 인라인 함수가없는 경우 단순히 퇴보 한 경우입니다.

많은 기능이 템플리트 형식으로 정의되어 있으므로 정의가 사용될 때마다 정의를 포함해야하는 C++에서는 이러한 정의가 매우 자주 .h (또는 .hpp 또는 기타) 파일에 포함됩니다. 그래서 이런 종류의 것은 선례가 있습니다.

2

필자는 반드시 이것을 권장하는 것은 아니지만 지난 10 년 이상 동안 많은 임베디드 프로젝트에서 본 적이 있습니다. 인라인 함수를 .inl로 포함하십시오.

브룩스는 책임을 잘 나누어줍니다. 당신은 보통의 함수 프로토 타입과 같은에서 인라인 매크로 정의를 분리하는 것이 좋습니다 :

#include "prototypes.h" 
#include "macros.inl" 

int foo(void); 
int bar(char); 

최종 목표는 일관성이다 : 어떤 레이아웃 결정이 당신을 성공하는 사람들을 지원해야한다.

2

필요한 곳에 두십시오.

하나의 파일에 대해서만 필요한 경우 해당 파일의 맨 위에 놓습니다.

여러 파일에 대해 필요한 경우 헤더 파일에 넣으십시오.

관련 문제