본문 바로가기

Information Technology/C

[C언어] MP3 관리 프로그램(1)

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)


 


각각의 Artist 객체에 SNode를 연결

노드와 데이터를 분리하는 이유: 하나의 노래 당 song 객체는 하나만 존재하고, 여러 플레이리스트에서는 SNode를 통해 Song 객체에 접근하기만 하면 됨


각 노래의 인덱스를 SIZE로 나눠서, 나머지가 동일한 것들끼리 분류하여 각 그룹을 하나의 단방향 연결 리스트로 저장


 

헤더 파일 -> 어떤 프로그램에 있는 기능을 다른 프로그램에서도 사용할 수 있게 해줌

 

Linker가 헤더 파일에 정의된 기능들을 main.c에서 실행할 수 있게 연결해줌


헤더 파일에는 prototype을 넣고, 실제 구현은 소스파일(. c)에 넣은 후 main.c에서 헤더 파일을 포함해서 사용


변수의 선언: 컴파일러에게 변수의 존재를 알려줌

변수의 정의: 실제로 메모리를 할당

int i; -> 선언과 정의를 동시에 함

extern int i; -> 변수를 정의하지 않고 오직 선언만.

 

file2.c : file.h를 include

file.h : extern int global_variable을 통해 변수 선언

file.c : 실제 global_variable이 저장되어있음

 

하지만, 변수의 공유는 최소화시키는 것이 좋음


file3.h가 prog.c에서 두 번 include 되는 상황.

 

매크로의 정의, 함수 프로토타입, 외부(extern) 변수의 선언은 중복되어도 상관없지만,

타입(구조체) 정의가 중복되는 건 컴파일러 오류를 야기시킴

#ifndef와 #endif로 헤더 파일을 둘러싸서 중복 정의를 방지

 

main.c  <-- string.h --> string.c

string.c는 string.h에 정의된 함수의 prototype에 함수를 구현하고,

main.c는 string.c를 통해 기능이 구현된 string.h를 include해서 string.h의 함수들을 사용할 수 있음