컴파일러는 파일 단위로 컴파일을 진행한다.
컴파일러는 다른 파일의 정보를 참조하여 컴파일을 진행하지 않는다.
외부에 선언 및 정의되었다고 컴파일러에게 알려주어야한다.
#extern 키워드
extern int num -> int형 변수 num이 외부에 선언되었음을 알림.
extern void Increment(void) -> 함수가 외부에 정의되었음을 알림.
함수를 알릴 때에는 extern을 생략할 수도 있음
즉, void Increment(void)가 가능함
#static 전역변수
이 변수는 외부 파일에서의 접근을 혀용하지 않는다 == 이 변수의 접근범위를 파일 내부로 제한한다.
#static 함수
파일 내에서만 접근이 가능한 함수
#include 지시자의 의미
#include "header1.h"는 이 문장의 위치에다가 header.h에 저장된 내용을 가져다 놓으라는 것이다.
헤더파일이 없으면 각각의 소스파일에 함수의 선언을 작성해야 한다. 하지만 헤더파일을 만듬으로써 #include "....h" 한줄로 대체될 수 있다.
구조체 선언 및 정의는 헤더파일에 삽입하는 것이 좋다. 그러나 하나의 소스파일내에서만 사용이 되는 구조체라면 소스파일에 정의하는 것도 괜찮다.
#ifndef __STDIV2_H__
#define __STDIV2_H__
typedef struct div
{
int quotient;
int remainder;
} Div;
#endif
구조체 같은 경우 헤더파일을 중복에서 넣었다간 두번 이상 정의 될 수 있다. 이렇게 되면 컴파일 에러가 나기 때문에 조건부 컴파일을 이용해 중복을 방지해야한다.
__STDIV2_H__
라는 매크로가 정의되어있지 않은 경우 ( 즉 헤더파일이 처음 컴파일 되려고 할때) 구조체를 정의한다. 헤더파일이 다음 컴파일 될 때에는 이미 __STDIV2_H__
매크로가 정의되어있어서 컴파일 하지 않는다