728x90

prob31
prob31-1

include 즉 헤더파일을 선언한 위치에 그대로 들어가는 것을 알 수있다.

prob33-main.c
prob33-readPoint.c
prob33-rectangle.c

각 파일들에 같은 구조체로 각각 선언되어있다. 이러한 이유는 C파일을 object파일로 컴파일 할때 컴파일러는 각 파일단위로 각각 컴파일을 진행하기 때문이다. 한 파일에 선언된 구조체를 다른파일에서 사용할 수 없다.  각 파일들을 오브젝트 파일로 컴파일하고 이러한 오브젝트 파일들은 링커에 의해 연결된다.

 

prob33 - .c file .o file

각 오브젝트 파일을 하나로 묶어서 실행파일을 생성하는 것은 링커가 진행하는데 이때 링커는 main함수를 찾아 실행파일을 만들 방법을 찾는다. main함수 없이는 실행 파일을 만들 수 없다. main함수가 프로그램의 시작위치를 알려준다.

main함수를 찾고나서 각각 전역변수의 접근과 함수의 호출 관계를 파악한다. 이러한 과정을 통해 링커는 여러 오브젝트 파일을 묶어 실행파일을 생성해 낸다.

prob33 main 실행

링커가 하는 일은 하나이상의 오브젝트 파일을 묶어서 하나의 실행파일을 만드는 일을 한다.

 

 

 

prob34 - main.c
prob34-point.h
prob34 - pointOperation.h
prob34 - pointOperation.c

각 헤더파일에 ifndef 을 사용한것은 중복 정의를 피하기 위해 정의한 것이다. ifndef은 if not define 의 약자로 point.h의 경우 __POINT_H__가 정의되어있지 않으면 __POINT_H__를 정의하고 해당 구조체를 정의하는 것이다. 이후에 개발자의 실수로 point.h를 두번 선언하게 되더라도 중복을 피할 수 있도록 정의한 것이다.

 

pointOperation.h에도 point.h가 선언되어있다. main.c에는 pointOperation.h와 point.h가 각각 선언되어있어 결과적으로 point.h가 두번 선언되어있는데 ifndef을 통해 중복을 막을 수 있다. 그리고 point.h의 구조체의 선언같은 경우 중복되면 컴파일 에러가 발생할 수 있어 ifndef의 중요성을 인식할 수 있다. 개발시 실수를 방지하기 위해 해더파일에 ifndef을 꼭 추가해주는 것이 좋을 듯 하다.

 

prob35-main.c
prob35-myString.h
prob35-stringOp1.c
prob35-stringOp2.c - strCpy
prob35-stringOp2.c-strCat

하나의 헤더파일에 여러 함수들을 선언하고 4개의 함수들을 2개의 파일에 걸쳐 정의하였다.

main함수에서는 myString.h만 include해주면 컴파일 에러가 발생하지않으니 간편하것 같다.

728x90

'Programming > C' 카테고리의 다른 글

프로젝트 1 - 전화번호부 만들기  (0) 2019.11.16
C 파일 입출력  (0) 2019.10.19
C구조체 연습문제  (0) 2019.09.08
C 메모리 동적할당 연습  (0) 2019.08.31
C다양한 함수 만들기  (0) 2019.08.23

+ Recent posts