파일의 분할과 헤더파일

BANG·2020년 11월 24일

C 기본

목록 보기
7/7

파일의 분할

  • 각각의 파일에 용도 및 특성 별로 나누어 저장

[분할하기 전]

#include<stdio.h>
#pragma warning(disable:4996)

int num = 0;

void Increment(void) {
	num++;
}

int Getnum(void) {
	return num;
}

main()
{
	printf("num : %d\n", Getnum());
	Increment();
	printf("num : %d\n", Getnum());
	Increment();
	printf("num : %d\n", Getnum());
}
  • 파일 분할 시 문제점.....

%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%E1%84%8B%E1%85%B4%20%E1%84%87%E1%85%AE%E1%86%AB%E1%84%92%E1%85%A1%E1%86%AF%E1%84%80%E1%85%AA%20%E1%84%92%E1%85%A6%E1%84%83%E1%85%A5%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%20142f857674764c809efb78234b28c7a4/Untitled.png

  • 외부에 선언 및 정의된 것을 알려주기!!!!(extern)
  • extern은 외부에 선언되었다고 만 컴파일러에게 알림(구체적으로 알리진 않음)

%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%E1%84%8B%E1%85%B4%20%E1%84%87%E1%85%AE%E1%86%AB%E1%84%92%E1%85%A1%E1%86%AF%E1%84%80%E1%85%AA%20%E1%84%92%E1%85%A6%E1%84%83%E1%85%A5%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%20142f857674764c809efb78234b28c7a4/Untitled%201.png

[분할한 후]

// num.c
int num = 0;

// func.c
extern int num;

void Increment(void) {
	num++;
}

int Getnum(void) {
	return num;
}

// main.c
#include<stdio.h>
#pragma warning(disable:4996)

extern void Increment(void);
extern int Getnum(void);

main()
{
	printf("num : %d\n", Getnum());
	Increment();
	printf("num : %d\n", Getnum());
	Increment();
	printf("num : %d\n", Getnum());
}

static + 전역변수

  • 외부 파일에서의 접근을 금지(허용하지 않음)
  • 접근 범위를 같은 파일 내부로 제한

헤더파일

  • 해당 문장의 위치에 헤더파일의 내용을 가져다 놓기(포함)

헤더파일을 include하는 방법 2가지(경로 차이)

#include<~~~.h>

  • 표준 헤더파일이 저장되어 있는 디렉토리에서 파일을 찾음

#include"~~~.h"

  • 해당 문장을 포함하는 소스파일이 저장된 디렉토리에서 찾음
  • 프로그래머가 정의하는 헤더파일을 포함시킬 때 사용
  • 절대경로를 명시해서 헤더파일 지정 가능
  • 상대경로를 사용하는 것을 추천함

헤더파일 생성

  • 외부에 선언된 변수에 접근
  • 외부에 정의된 함수 호출(함수의 선언 부분만 헤더파일에 작성)
  • 구조체의 정의 및 선언(헤더파일 중복 삽입(include)시 에러 발생)

%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%E1%84%8B%E1%85%B4%20%E1%84%87%E1%85%AE%E1%86%AB%E1%84%92%E1%85%A1%E1%86%AF%E1%84%80%E1%85%AA%20%E1%84%92%E1%85%A6%E1%84%83%E1%85%A5%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%20142f857674764c809efb78234b28c7a4/Untitled%202.png

profile
Record Everything!!

0개의 댓글