0
Modulization
Developing a Large Program
§ Developing a large Program
– 대규모 Program의 경우, 여러 ~.h 파일과 ~.c파일로 나누어 작성할
수 있다.
– Team에 의한 작업분담...
3
프로그래밍의 모듈화
§ Source Code를 여러 파일로 분할하기
#define TWO 2
typedef void VOID ;
int g;
VOID func1(VOID) ;
VOID func2(VOID ) ;
VO...
4
프로그래밍의 모듈화
§ Source Code를 여러 파일로 분할하기 1
– 각 파일에 필요한 내용을 넣고,
– 파일에서 사용하는 외부객체에 대한 선언을 추가한다.
• Global 변수에 대한 extern 선언
• F...
5
프로그래밍의 모듈화
§ Source Code를 여러 파일로 분할하기 1 – 문제점
– #define TWO 2 혹은 typedef void VOID를 바꾸고 싶으면…
– 모든 source 파일에서 수정해야 함
=> ...
6
프로그래밍의 모듈화
§ Source Code를 여러 파일로 분할하기 2
– 일반적으로 각 *.c 파일에 대하여 하나의 *.h 파일을 만든다.
– *.c파일의 내용
• 해당 함수
• 해당 함수에서 만 사용하는 정의 및...
7
프로그래밍의 모듈화
§ Source Code를 여러 파일로 분할하기 2
extern int g VOID func1(VOID) ; VOID func2(VOID) ;
int g;
VOID main(VOID)
{
func...
프로그래밍의 모듈화
§ Source Code를 여러 파일로 분할하기 2
– *.c와 *.h파일에서 필요한 *.h를 include한다.
file1.h file2.h file3.h
extern int g
#include “...
조건부 컴파일
§ 헤더 파일 포함 관계에서 발생하는 문제
– 하나의 헤더 파일을 두 번 이상 포함!
– TWO 등이 중복해서 선언되는 문제점
– 조건부 컴파일로 문제 해결!
file1.h file2.h file2.h
f...
조건부 컴파일
§ #ifndef, #endif 기반 조건부 컴파일
– 각 header파일의 모든 내용을 #ifndef와 #endif로 묶는다.
– #define UNIQUE_NAME 을 사이에 넣는다.
10
11
조건부 컴파일
file1.h file2.h file3.h
#ifndef _FILE1_H_
#define _FILE1_H_
extern int g
#endif
#ifndef _FILE2_H_
#define _FILE...
12
file1.h file2.h file3.h
#ifndef _FILE1_H_
#define _FILE1_H_
extern int g
#endif
#ifndef _FILE2_H_
#define _FILE2_H_
#in...
Upcoming SlideShare
Loading in...5
×

15 3. modulization

176

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
176
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "15 3. modulization"

  1. 1. Modulization
  2. 2. Developing a Large Program § Developing a large Program – 대규모 Program의 경우, 여러 ~.h 파일과 ~.c파일로 나누어 작성할 수 있다. – Team에 의한 작업분담이 용이해진다. – 프로그램이 변경될 때마다 변경된 ~.c 파일만을 compile함으로서 시간 절약 가능. 2
  3. 3. 3 프로그래밍의 모듈화 § Source Code를 여러 파일로 분할하기 #define TWO 2 typedef void VOID ; int g; VOID func1(VOID) ; VOID func2(VOID ) ; VOID main(VOID ) { func1() ; func2() ; g *= TWO ; } file.c VOID func1(VOID ) { func2() ; g += TWO ; } VOID func2(VOID ) { func1() ; g -= TWO ; } 친구1 작성 친구2 작성 내가 작성
  4. 4. 4 프로그래밍의 모듈화 § Source Code를 여러 파일로 분할하기 1 – 각 파일에 필요한 내용을 넣고, – 파일에서 사용하는 외부객체에 대한 선언을 추가한다. • Global 변수에 대한 extern 선언 • Function의 prototype #define TWO 2 typedef void VOID ; int g; VOID func1(VOID) ; VOID func2(VOID) ; VOID main(VOID) { func1() ; func2() ; g *= TWO ; } #define TWO 2 typedef void VOID ; extern int g; VOID func2(VOID) ; VOID func1(VOID) { func2() ; g += TWO ; } #define TWO 2 typedef void VOID ; extern int g; VOID func1(VOID) ; VOID func2(VOID) { func1() ; g -= TWO ; } file1.c file2.c file3.c
  5. 5. 5 프로그래밍의 모듈화 § Source Code를 여러 파일로 분할하기 1 – 문제점 – #define TWO 2 혹은 typedef void VOID를 바꾸고 싶으면… – 모든 source 파일에서 수정해야 함 => Header file 사용 #define TWO 2 typedef void VOID ; int g; VOID func1(VOID) ; VOID func2(VOID) ; VOID main(VOID) { func1() ; func2() ; g *= TWO ; } #define TWO 2 typedef void VOID ; extern int g; VOID func2(VOID) ; VOID func1(VOID) { func2() ; g += TWO ; } #define TWO 2 typedef void VOID ; extern int g; VOID func1(VOID) ; VOID func2(VOID) { func1() ; g -= TWO ; } file1.c file2.c file3.c
  6. 6. 6 프로그래밍의 모듈화 § Source Code를 여러 파일로 분할하기 2 – 일반적으로 각 *.c 파일에 대하여 하나의 *.h 파일을 만든다. – *.c파일의 내용 • 해당 함수 • 해당 함수에서 만 사용하는 정의 및 선언 • 필요한 *.h파일들 – *.h파일의 내용 • *.c 파일에서 선언한 Global 변수에 대한 extern 선언 • *.c 파일에서 정의한 Function의 prototype • *.c 파일에서 정의한 것 중 외부에서도 필요한 내용 • 필요한 *.h파일들 – 다른 모든 파일에서 필요로 하는 선언을 담은 *.h 파일을 만든 다.
  7. 7. 7 프로그래밍의 모듈화 § Source Code를 여러 파일로 분할하기 2 extern int g VOID func1(VOID) ; VOID func2(VOID) ; int g; VOID main(VOID) { func1() ; func2() ; g *= TWO ; } VOID func1(VOID) { func2() ; g += TWO ; } VOID func2(VOID) { func1() ; g -= TWO ; } file1.h file2.h file3.h file2.c file3.cfile1.c #define TWO 2 typedef void VOID ; def.h
  8. 8. 프로그래밍의 모듈화 § Source Code를 여러 파일로 분할하기 2 – *.c와 *.h파일에서 필요한 *.h를 include한다. file1.h file2.h file3.h extern int g #include “def.h” VOID func1(VOID) ; #include “def.h” VOID func2(VOID) ; #include “def.h” #include “file2.h” #include “file3.h” int g; VOID main(VOID) { func1() ; func2() ; g *= TWO ; } #include “def.h” #include “file1.h” #include “file3.h” VOID func1(VOID) { func2() ; g += TWO ; } #include “def.h” #include “file1.h” #include “file2.h” VOID func2(VOID) { func1() ; g -= TWO ; } def.h #define TWO 2 typedef void VOID ; file2.c file3.cfile1.c 8
  9. 9. 조건부 컴파일 § 헤더 파일 포함 관계에서 발생하는 문제 – 하나의 헤더 파일을 두 번 이상 포함! – TWO 등이 중복해서 선언되는 문제점 – 조건부 컴파일로 문제 해결! file1.h file2.h file2.h file1.c file2.c file3.c def.h #define TWO 2 typedef void VOID ; 9
  10. 10. 조건부 컴파일 § #ifndef, #endif 기반 조건부 컴파일 – 각 header파일의 모든 내용을 #ifndef와 #endif로 묶는다. – #define UNIQUE_NAME 을 사이에 넣는다. 10
  11. 11. 11 조건부 컴파일 file1.h file2.h file3.h #ifndef _FILE1_H_ #define _FILE1_H_ extern int g #endif #ifndef _FILE2_H_ #define _FILE2_H_ #include “def.h” VOID func1(VOID) ; #endif #ifndef _FILE3_H_ #defien _FILE3_H_ #include “def.h” VOID func2(VOID) ; #endif #include “def.h” #include “file2.h” #include “file3.h” int g; VOID main(VOID) { func1() ; func2() ; g *= TWO ; } #include “def.h” #include “file1.h” #include “file3.h” VOID func1(VOID) { func2() ; g += TWO ; } #include “def.h” #include “file1.h” #include “file2.h” VOID func2(VOID) { func1() ; g -= TWO ; } def.h #ifndef _DEF_H_ #define _DEF_H_ #define TWO 2 typedef void VOID ; #endif file2.c file3.cfile1.c
  12. 12. 12 file1.h file2.h file3.h #ifndef _FILE1_H_ #define _FILE1_H_ extern int g #endif #ifndef _FILE2_H_ #define _FILE2_H_ #include “def.h” VOID func1(VOID) ; #endif #ifndef _FILE3_H_ #defien _FILE3_H_ #include “def.h” VOID func2(VOID) ; #endif #include “def.h” #include “file2.h” #include “file3.h” int g; VOID main(VOID) { func1() ; func2() ; g *= TWO ; } #include “def.h” #include “file1.h” #include “file3.h” static int g1 ; VOID func1(VOID) { func2() ; g += TWO ; } static VOID sfunc1(VOID) { } #include “def.h” #include “file1.h” #include “file2.h” static int g2 ; VOID func2(VOID) { func1() ; g -= TWO ; } static VOID sfunc2(VOID) { } def.h #ifndef _DEF_H_ #define _DEF_H_ #define TWO 2 typedef void VOID ; #endif file2.c file3.cfile1.c
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×