저는 임베디드 시스템으로 작업 중이며 HW- 인터페이스 인 #define
매크로를 사용하고 있습니다. 나는이 모든 것들을 OOP를위한 별도의 파일에 넣고 싶지만, 나는 #include
에 대한 최선의 방법을 모른다. 나는 그것들을 모두 .c 파일에 넣은 다음 포함시켜야합니까? 이것들을 .h 파일에 넣는 것은 어리석은 것처럼 보입니다.이 함수와 유사한 #define은 어디에서 모두 C에 넣을 수 있습니까?
답변
이들은 .h
개의 파일에 있어야합니다. 다른 옵션은 .c
파일이며, .c
파일을 포함하려면 파일을 사용해야합니다. 사람마다 매우 혼란 스러울뿐만 아니라 모든 .c
파일이 파일에 직접적으로 해당한다는 표준 가정을 사용하면 makefile을 혼란스럽게합니다. .o
파일을 컴파일합니다.
정상적인 패턴은 .h
파일이 다른 장소 (특히 여러 개의 다른 장소)에 포함되어 있고 .c
파일이 개체 파일로 한 번 컴파일 된 파일을위한 것입니다.
- 기능 프로토 타입
- 상수 선언
- 글로벌 변수
- 인라인 함수 정의 부
extern
선언 - 유형 정의 과 : 따라서
, 다음 사항은 일반적으로 .h
파일로 이동 매크로 정의 (예 : 묻고있는 것) 약. 오브젝트 코드로 컴파일 및
"의 사건을 연결됩니다
- 글로벌 변수 정의
- 기능 정의 : 반대로
, 다음 사항은 일반적으로 .c
파일로 이동 함수 정의는 .c
개로 제한됩니다. "는 인라인 함수가없는 경우 단순히 퇴보 한 경우입니다.
많은 기능이 템플리트 형식으로 정의되어 있으므로 정의가 사용될 때마다 정의를 포함해야하는 C++에서는 이러한 정의가 매우 자주 .h
(또는 .hpp
또는 기타) 파일에 포함됩니다. 그래서 이런 종류의 것은 선례가 있습니다.
필자는 반드시 이것을 권장하는 것은 아니지만 지난 10 년 이상 동안 많은 임베디드 프로젝트에서 본 적이 있습니다. 인라인 함수를 .inl로 포함하십시오.
브룩스는 책임을 잘 나누어줍니다. 당신은 보통의 함수 프로토 타입과 같은에서 인라인 매크로 정의를 분리하는 것이 좋습니다 :
#include "prototypes.h"
#include "macros.inl"
int foo(void);
int bar(char);
최종 목표는 일관성이다 : 어떤 레이아웃 결정이 당신을 성공하는 사람들을 지원해야한다.
필요한 곳에 두십시오.
하나의 파일에 대해서만 필요한 경우 해당 파일의 맨 위에 놓습니다.
여러 파일에 대해 필요한 경우 헤더 파일에 넣으십시오.
- 1. 어디에서 registerDefaults를 넣을 수 있습니까?
- 2. 어디에서 Excel에 ADO 스크립트를 넣을 수 있습니까?
- 3. 이 헤더 파일은 어디에서 얻을 수 있습니까?
- 4. 어디에서 C# 대리자 선언을 자신의 파일에 넣을 수 있습니까?
- 5. #define은 매크로 주위에 공백을 추가해야합니까?
- 6. 어디에서 string.c 파일을 찾을 수 있습니까?
- 7. C에 wxWidgets 프레임 워크가 있습니까?
- 8. 어디에서 Mono.Cecil.Pdb.dll을 얻을 수 있습니까?
- 9. 이 domain_extractor에 대한 좋은 참고 자료는 어디에서 찾을 수 있습니까?
- 10. 오디오를 '전화'모드로 넣을 수 있습니까?
- 11. php -이 IF 조건을 스위치 안에 넣을 수 있습니까?
- 12. ObjectiveC @selector를 NSDictionary에 넣을 수 있습니까?
- 13. 이 UC Berkeley 과정과 유사한 다른 과정을 찾을 수 있습니까
- 14. 'nil` 결과를 모두 정렬하여 버릴 수 있습니까?
- 15. 색상으로 인쇄/넣을 수 있습니까?
- 16. 플러그인없이 Squeak VM을 C에 포함시킬 수 있습니까?
- 17. ANSI C에 가장 보편적 인 확장이 있습니까?
- 18. 람다 함수와 함께 사용할 수 있습니까?
- 19. 이 아코디언 jQuery 플러그인은 어디에서 찾을 수 있습니까?
- 20. 이 함수의 기본 구현은 어디에서 찾을 수 있습니까?
- 21. GROUP BY를 기본 키로 사용할 때 집계 함수와 하위 쿼리를 모두 피할 수 있습니까?
- 22. NSFetchedResultsController를 Managed Object Class에 넣을 수 있습니까?
- 23. 트랜잭션에서 NHibernate Session 계단식 (모두)이 있습니까?
- 24. 어디에서 VBSQL.VBX를 찾을 수 있습니까?
- 25. AuthKit의이 코드는 어떤 역할을합니까? (이 함수와 메소드는 어디에 정의되어 있습니까?)
- 26. ListView 이벤트의 순서는 어디에서 찾을 수 있습니까?
- 27. 어디에서 ajax 호출에 super_model을 포함시킬 수 있습니까?
- 28. C에서 함수와 유사한 매크로를 정의 할 때 {} 쌍 또는() 쌍을 사용하여 차이가 있습니까? 예를 들어
- 29. ispell을위한 프랑스어 사전은 어디에서 찾을 수 있습니까?
- 30. 이 유사한 T-SQL 쿼리
FWIW : "기능"이 아닌 "매크로"라고합니다. – dmckee
.h 파일에 모두 넣는 것이 어리석은 이유는 무엇입니까? – FrustratedWithFormsDesigner
@dmckee : 표준에서 사용 된 용어 인 "객체와 유사한 매크로"와 달리 "차이점"을 분리하여 "함수와 유사한 매크로"라고 부를 수 있습니다. –