C에서 ADT를 구현할 때 나는 항상 struct
의 정의가 .c
파일에 있어야만 개인용이라고 생각했습니다. 그리고 typedef
의 파일은 .h
파일에 있어야 다른 모듈이 ADT를 사용할 수는 있지만 해당 특성을 직접 수정할 수는 없습니다. 최근 문제가 발생하여 구조체를 .h
으로 이동해야했습니다. 나는 또한 대답 Error: In C, got the error "dereferencing pointer to incomplete type" in a struct pointer을 찾았는데 struct
은 .c
파일에 정의되어야한다. 사실입니까? 그렇다면 이유는 무엇입니까?구조체의 정의는 어디에서 C로 선언해야합니까? .c 또는 .h?
0
A
답변
2
난에서 언급 된 바와 같이 comment :
ADT위한 구조 정의는 일반적으로 지원 함수를 정의하는 소스 (.c
) 파일이어야하며, 단지 타입 선언 헤더에 존재한다 (.h
) 파일.
그러나 이는 ADT를 정의하는 소스 파일 외부에서 구조의 인스턴스를 할당 할 수 없음을 의미합니다. 외부 ADT에 대한 포인터 만 정의 할 수 있습니다.
원본에서 헤더로 정의를 이동해야한다면 포인터를 사용하고 있어야하는 포인터를 사용하고 있지 않은 것을 의미합니다. 돌아가서 깨진 코드를 수정하고 구조체 정의를 ADT의 소스 파일로 다시 이동하십시오.
그리고 comment에 무엇이 Nevado인지 확인하면 ADT 배열을 가질 수 없음을 의미합니다. ADT에 대한 포인터의 배열은 가질 수 있지만 ADT의 배열은 가질 수 없습니다.
구조체가 원하는대로 또는 필요한 경우 구조체를 노출하는 것이 가장 합리적임을 유의하십시오. 그런 다음 데이터 유형 또는 그 배열의 변수를 만들거나 다른 구조 등에 유형 (유형에 대한 포인터가 아닌)을 포함시킬 수 있습니다. 구조체를 사용하는 코드를 작성하는 프로그래머는 세부 사항을 볼 수 있으며 구조체 요소에 직접 액세스 (읽기 또는 수정) 할 수 있습니다. 신중한 프로그래머들은 불필요하게 그렇게하지 않을 것이지만, 엄격한 ADT 관용구에 의해 배제 된 가능성을 열어줍니다.
관련 문제
- 1. C++ : .h 파일에서 모든 함수와 ivars를 선언해야합니까?
- 2. 액터 메시지는 어디에서 선언해야합니까?
- 3. 어떻게 C로 구조체의 배열을 만드나요?
- 4. 다른 레이아웃의 버튼은 어디에서 선언해야합니까?
- 5. 구조체의 문자열을 C로 인쇄하는 방법
- 6. 구조체의 바이트를 C로 파일에 쓰기 #
- 7. 구조체의 배열이 C로 함수로 전달됨
- 8. 형식 정의는 목표 - C
- 9. Visual Studio 2010에서 클래스의 생성자를 어디에서 선언해야합니까? winforms project C++?
- 10. C 구조체의 필드를 추출하십시오.
- 11. 웹 페이지에서 전역 JavaScript 변수는 어디에서 선언해야합니까?
- 12. 앱을 제출할 때 어디에서 앱내 구매를 선언해야합니까?
- 13. Durandal Project에서 jQuery 함수는 어디에서 선언해야합니까?
- 14. cpanfile 형식 정의는 어디에서 찾을 수 있습니까?
- 15. C 구조체의 배열
- 16. .h 파일에서 arrayList를 선언하는 C
- 17. C 언어 정의는 의미
- 18. 구조체의 입력을 파일에서 받아서 C로 인쇄
- 19. 구조체의 C++ 다차원 배열
- 20. Objective-C 및 C++ 구조체의 크기
- 21. 개체를 const 또는 let으로 선언해야합니까?
- 22. C++ 또는 C로 igraph 데이터를 플로팅 하시겠습니까?
- 23. .h 또는 .c/.cpp에 #include가 포함되어 있습니까?
- 24. C 구조체의 초기화 지연
- 25. 구조체의 문자열 관리 C# #
- 26. Cake에게 nmake를 어디에서 찾을지를 알려주기 위해 -D 정의는 무엇입니까?
- 27. python struct h 또는 H 정렬을 해제하십시오.
- 28. Android H.263 또는 H.264 파일?
- 29. 예약 식별자 "__CLIBNS"의 원래 정의는 어디에서 찾을 수 있습니까?
- 30. 구조체의 배열을 C
정확히 무엇입니까? struct 정의가 여러 .c 파일에서 필요하면 헤더에 있어야하며, 그렇지 않으면 필요하지 않습니다. –
@ M.M 하나의 .c 파일에만 필요합니다. 내 질문은 좋은 연습으로 간주되는 옵션이 있고 다른 옵션이 아닌 경우, 그리고 그럴 경우 그 이유입니다. – Nevado
그건 실제로 의견의 문제입니다. 일반적으로 다른 곳에서 사용할 필요가 없다면 헤더에 무엇인가 넣지 않는 것이 좋습니다. –