모노산달로스의 행보

Xcode에서 C언어를 공부할 때 여러개의 헤더 파일과 C파일로 분리하여 관리하는 방법 / 부제 : ChatGPT를 활용한 문제 해결 본문

App/Xcode

Xcode에서 C언어를 공부할 때 여러개의 헤더 파일과 C파일로 분리하여 관리하는 방법 / 부제 : ChatGPT를 활용한 문제 해결

모노산달로스 2023. 3. 16. 14:41

Xcode를 다루는 방법

 

C언어를 배우다 보면 꼭 거쳐가는 부분이 있다. 바로 헤더 파일과 메인 소스파일을 분리하는 것이다. 공부를 하다 보면 소스코드가 길어지고 유지보수가 힘들어진다. 이는 작업의 비효율로 이어지게 되는데 개발자의 편의성을 위해서도 작업을 효율적으로 하기 위해서도 소스 코드를 분리해서 관리해야 한다. 윈도우에서 Visual Studio를 사용할 경우 아래 블로그를 확인해 보자.

 

https://modoocode.com/87

 

씹어먹는 C 언어 - <18 - 1. 파일 뽀개기 (헤더파일과 #include) >

 

modoocode.com

 


 

문제는 Mac유저들이 Xcode로 C언어를 공부할 때 생긴다. 시도를 해보면 알겠지만 분명 같은 방법으로 분리를 했음에도 Xcode가 컴파일을 수행하지 못하고 있다. 실제로 글쓴이가 겪은 예시를 통해 상황을 설명해 보겠다.

 

 

우선 하나의 프로젝트에서 작업 파일을 3개로 분리했다. 내용을 간단히 설명하자면 아래와 같다.

 

1. Main.c : 메인 함수가 구현되어 있다. 

2. function.c : Main함수에서 불러오는 여러 가지 함수가 구현되어 있다.

3. head.h : 헤더파일에는 함수 선언부와 전처리기 함수가 작성되어 있다.

 

 

해당 코드는 main.c의 일부분이다. #include "head.h"로 헤더파일을 include 하고 있다.

 

해당 코드는 head.h 헤더파일의 일부분이다. 처음에는 여러 함수의 선언부와 구현부가 모두 적혀있었다. 이 상태로 컴파일하면 문제가 발생하지 않았다. 하지만 여기서 function.c파일을 추가하여 함수의 구현부를 분리하면 어떻게 될까?

함수의 구현부를 head.h파일에서 function.c파일로 옮겨왔다. 이후 #include "head.h"를 추가해 주었다.

그리고 main.c로 돌아가서 컴파일을 하면 오류가 나타난다. 고민 끝에 내린 결론은 아래와 같았다.

 

1. 소스 코드와 파일 분리 방식에는 문제가 없다.

2. 분명 Xcode에서 파일링킹을 위한 무언가 설정을 해야 하는데 방법을 모른다.

 

나는 해당 문제를 해결하기 위해 정보가 필요했다. 하지만 구글링을 해도 내가 원하는 답은 나오지 않았다. 파일 링킹을 검색하면 파일 입출력하는 방법이 나오고 C언어 헤더 파일 분리를 검색하면 Xcode가 아닌 다른 환경에서의 방법만 무수하게 쏟아졌다. 그렇게 내가 선택한 방법은 'ChatGPT'였다.  아래에 실제 ChatGPT와의 대화 내역을 첨부하겠다. (부족한 영어 실력에 양해를 구한다)

 

 


 

Xcode에서 C 언어를 header.h, main.c, fjunction.c 세 가지 파일로 분리하는 방법을 물어보았다. ChatGPT는 영어를 이용하면 더 많은 정보를 얻을 수 있다는 사실은 다들 알고 있을 것이다. 개떡같이 적어도 찰떡같이 잘 알아들으니 영어로 질문해 보자.

 

답변 내용은 기본적으로 C언어에서 파일을 분리하는 방법을 15가지 Step으로 설명하고 있다. 우리는 많은 블로그에서 해당 부분에 대한 설명을 찾을 수 있다. 그것도 친절하게 한글로 설명되어 있고 이미 다들 알고 있는 내용이다. 하지만 여기서 주목해야 할 부분은 가장 아래의 Note의 내용이다.

 

Note: When building and running the proejct in Xcode, all three files will be compiled together to create the final executable.

 

Xcode가 파일을 실행할 때, 세 파일이 함께 컴파일되어야 한다고 이야기한다. 문제가 되는 부분의 핵심을 찾은 것 같다.

그렇다면 어떻게 세 파일을 함께 컴파일하는지 물어보았다.

6가지 Step으로 설명하는 내용은 각 파일에 들어있는 내용에 대한 이야기이다. 이번에도 중요한 건 가장 아래의 문장이다.

 

When you build the project, Xcode will automatically compile all the necessary files and link them together to create an executable program. If there are any errors or warnings during the build process, Xcode will display them in the "Issue Navigator" pane.

 

내용인 즉, Xcode는 프로젝트를 빌드할 때 자동으로 파일을 링킹 하여 실행 프로그램을 만든다. 만약 에러나 워닝이 발생하면 'Issue Navigator'에 나타난다.

여기서 아까 본 에러창이 기억나는가? 엄청난 'Undefined symbol : _'로 가득 차있었다. 드디어 우리가 원하는 정보에 도달했다는 확신이 들었다. 마지막으로 아래와 같이 질문했다.

내 Xcode에서는 함께 컴파일을 하는데 에러가 발생한다. function.c 파일에서 undefined symbol 에러가 발생한다.

드디어 해결법이 나타났다. 

 

1. #Include를 적절하게 사용했는지 확인하라 main.c와 function.c 모두 head.h를 include 해야 한다.

2. function.c 에 정의된 함수가 올바른지 확인하라.

3. 세 파일이 모두 하나의 프로젝트에 존재하는지 확인하라.

4. build setting에서 function.c 파일이 compilation process에 포함되어 있는지 확인하라.

 

답변 내용 4번이 지금까지의 모든 문제를 관통하는 핵심 문장이다.

아래에서 사진과 함께 해결 방법을 설명하겠다.

우선 프로젝트 파일을 클릭한다.

그럼 위와 같이 여러 가지 세팅 환경이 나타나는데 여기서 'Build Phases'를 클릭한다.

그러면 'Compile Sources'main.c파일만 존재한다는 것을 확인할 수 있다. ChatGPT가 언급한 대로 function.c 가 존재하지 않기 때문에 에러가 발생했다. 아래의 + 버튼을 눌러서 간단하게 function.c파일을 추가해 줄 수 있다.

 


 

 

그리고 컴파일을 해보면 기분 좋은 망치가 나타난다. 이렇게 Xcode에서 C 언어 파일을 관리할 때 헤더 파일과 메인 파일 그리고 함수 파일로 분리하는 방법을 알아보았다. Mac이나 Xcode는 처음 사용하는 경우 배워야 하는 부분이 많다. 그래서 정보를 찾는 능력이 중요한데 ChatGPT가 그 역할을 생각보다 잘해주었다. 여러분도 문제가 생기면 'Open AI ChatGPT'를 체험해 보길 바란다. 사용자의 능력에 따라서 잘 이용한다면 많은 정보를 쉽게 얻어낼 수 있다.

 

마지막으로 ChatGPT 활용법에 대한 영상을 첨부하겠다. 아래 영상을 참고해서 한 번씩 사용해 보길 바란다.