안녕하세요 분할 컴파일에 대한 질문입니다


헤더파일과 소스파일을 분리해서 헤더파일에는 "함수의 원형"만 쓰고
소스파일에는 해당 헤더파일에 "선언만 했었던 함수의 실제 정의"를 쓰는것은 알고 있습니다

그리고 "여러 소스파일"에서 하나의 "헤더파일"을 다중으로 include하는 경우도 있기에
"중복 include"가 발생하는 것을 막고자 include된 헤더파일은 1번만 include되도록

ifndef를 사용하는 것도 알고 있습니다

그러면 test.h파일도 ifndef를 이용했기 때문에
main.c와 test.c에서 include해도 1번만 include가 될것입니다 하지만

왜 오류 문구에 “여러번 정의 되었습니다” 라고 뜨는 것인가요?
전역변수는 선언과 정의가 동시에 되기에 중복으로 include하면 않되기에 일부로
ifndef를 이용해서 중복으로 되지 않도록 했습니다

물론 #pragma once도 해봤습니다 그런데 되지 않네요…

extern만이 답인가요?

전역변수는 전처리가 되기 전에 먼저 메모리가 할당된다든가 그런 특별한 것이 있나요?

질문 부탁드립니다 ㅠㅠ
아무리 검색해도 이런 질문에 대한 답변을 찾을수가 없었습니다

보시다시피 에러 메시지는 링커 에러입니다.
동일한 이름이 두 군데 모듈에서 정의되었기에 발생하는 문제입니다.

타입 정보를 컴파일타임에 여러곳에서 참조하는것과
실제 데이타를 생성시키는 것은 별개의 문제기 때문입니다.

따라서 extern 말고는 답이 없습니다.

이것 때문에 잠을 못잤어요 정말로 감사드립니다

1 Like

꼭 그래야만 할 이유가 있는 게 아니라면 답변하는 사람이 보기 좋게 코드 내용은 스크린 샷이 아니고 이 게시판에 맞는 형식으로 작성해 주시는 게 게 좋습니다.

아! 그렇군요 알려주셔서 감사합니다 ㅎㅎ