※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다.
main.cpp 에서 read_line 함수를 호출하면
string_tools.cpp 에서 read_line 함수를 정의한 것을 불러오게 됨
이들을 연결시켜주기 위한 메커니즘은..
string_tools.h에 read_line 함수의 프로토타입을 써주어야 하고
main.cpp에 #include "string_tools.h" 헤더파일 포함시켜야 함
그리고
string_tools.cpp 에 자신이 해당하는 헤더파일 include "string_tools.h" 해서 포함시켜주면
연결 완성
<string_tools.h 헤더파일 - 소스코드>
#pragma once
#include <stdio.h>
int read_line(FILE *fp, char str[], int n); // 함수 프로토타입
여기서 #pragma once 는 "헤더파일이 중복 include 되는 것을 방지" 하는 문장이다. 비쥬얼 스튜디오의 버전에 따라 지원이 될수도 있고 안될 수도 있다.
수업시간에 배운 #ifndef - #endif 지시어를 사용할 수도 있다.
중복된 헤더 파일 문제를 해결하기 위한 지시어 사용법을 다시 복습해보자.
#ifndef - #endif
#ifndef BOOLEAN_H // 여기서 파일 이름 Boolean.h 을 대문자로 바꿔쓰는건 관습
#define BOOLEAN_H
#define TRUE 1
#define FALSE 0
#typedef int bool;
#endif
#ifndef
: 만약 Boolean.h 가 정의되어있지 않으면 아래가 유효하다는 뜻이다.
이미 정의되어 있다면 아래를 무시한다.
<string_tools.h 헤더파일 - 소스코드>
위에 배운 지시어를 사용하여 다시 소스코드문을 작성하였다.
#ifndef STRING_TOOLS_H
#define STRING_TOOLS_H
#include <stdio.h>
int read_line(FILE *fp, char str[], int n);
#endif
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "string_tools.h"
#define BUFFER_LENGTH 200
int main() {
process_command();
}
void process_command() {
char command_line[BUFFER_LENGTH];
char *command;
while (1) { // infinite loop
printf("$ "); // prompt
if (read_line(stdin, command_line, BUFFER_LENGTH) <= 0)
continue;
command = strtok(command_line, " "); // 첫번째 command 를 입력 받는다
if (strcmp(command, "add") == 0)
handle_add();
/*
else if (strcmp(command, "search") == 0)
handle_search();
else if (strcmp(command, "remove") == 0)
handle_remove();
else if (strcmp(command, "status") == 0)
handle_status();
else if (strcmp(command, "play") == 0)
handle_play();
else if (strcmp(command, "save") == 0)
handle_save();
*/
else if (strcmp(command, "exit") == 0)
break;
}
}
strtok 함수 복습▼
2021.06.22 - [자료구조] - 전화번호부 v3.0 - 배열 재할당, 라인단위 입력과 문자열 tokenizing
이제 handle_add 함수가 어떻게 작동해야 하는지 실행결과를 먼저 살펴보자.
▼
void handle_add() {
char buffer[BUFFER_LENGTH];
char *artist = NULL, *title = NULL, *path = NULL;
printf(" Artist: ");
if (read_line(stdin, buffer, BUFFER_LENGTH) > 0)
artist = strdup(buffer);
printf(" Title: ");
if (read_line(stdin, buffer, BUFFER_LENGTH) > 0)
title = strdup(buffer);
printf(" Path: ");
if (read_line(stdin, buffer, BUFFER_LENGTH) > 0)
path = strdup(buffer);
/* add to the music library */
}
이제 handle_add 함수 안에 add_song 함수를 통해 곡을 실제로 추가를 해주도록 만들 것이다.
add_song 함수는 library.cpp 에서 구현할 것이며, main.cpp 와 연결되도록 해주어야 한다. 위에 배웠던 것과 마찬가지로 아래 순서들을 통해 연결시켜준다.
① main.cpp 의 add_song 함수를 library.cpp 에 정의한다.
② library.h 에 add_song 함수 프로토타입을 작성한다.
③ main.cpp 와 library.cpp 파일들에게 #include "library.h" 를 작성한다.
▼ library.h
#ifndef LIBRARY_H
#define LIBRARY_H
void add_song(char *artist, char *title, char *path);
#endif // LIBRARY_H
이번 시간에는 헤더파일을 포함하는 방법에 대한 내용을 중점적으로 배워봤다. add_song 함수에 대한 자세한 설명은 다음 게시물에서 이어나가겠다.
(연결리스트의 개념이 들어갈 것이다.)
'💡 자료구조' 카테고리의 다른 글
Music Library Program - add_song 함수 (0) | 2021.08.19 |
---|---|
이중연결리스트 (0) | 2021.08.10 |
연결리스트 - 다항식 (0) | 2021.08.04 |
연결리스트 - 함수들 정리 (0) | 2021.08.04 |
연결리스트 - 순회하기 (0) | 2021.08.04 |