CHAPTER 9
PROGRAM STRUCTURE
Our previous programs have had a simple structure.
This chapter deals with more complex program
organizations.
We finish up our description of variables local
to particular functions
and introduce variables accessible by any function.
While discussing variables, we present the storage
classes that control their lifetime, location, and
visibility.
We then show how header files simplify accessing
variables and functions defined in other files,
and how we can have variables and functions accessible only
within a single file.
This chapter concludes with a case study: an initial
implementation of a set data type.
Jump to:
[Previous Chapter |
Next Chapter]
- LOCAL VARIABLES
- Concise Variable Declarations
- Initializing Local Variables
- Declaring Variables within Blocks
- GLOBAL VARIABLES
- STORAGE CLASSES
- The Storage Class auto
- The Storage Class register
- The Storage Class static
- The Storage Class extern
- TYPE QUALIFIERS
- USER-DEFINED TYPES
- HEADER FILES
- PRIVATE VARIABLES AND FUNCTIONS
- Implementing Queues
- Implementing Our Bus Stop Simulator
- CASE STUDY: ABSTRACT DATA TYPES
- Implementing Sets
- The Set Type and Its Operations
- Using Sets
Objectives
- ÇÁ·Î±×·¥ ¸ðµâ ±¸¼ºÀÇ Á߿伺À» ÀνÄÇÑ´Ù.
- Functionµé »çÀÌ¿¡ °øÀ¯µÇ¾î¾ß ÇÒ Á¤º¸ Ç¥ÇöÀ» À§ÇÑ Àü¿ª º¯¼ö »ç¿ë¹ýÀ» ÀÍÈù´Ù.
- °ú´ÙÇÑ Àü¿ª º¯¼ö »ç¿ëÀÇ À§ÇèÀ» ÀνÄÇÑ´Ù.
- ÇϳªÀÇ ¸ðµâ¿¡ ±¹ÇÑµÈ function ¹× global variable
Á¤ÀǸ¦ À§ÇÑ static keyword »ç¿ë¹ýÀ» ÀÍÈù´Ù.
- Interface, Package, Abstraction, Implementor, client µîÀÇ °³³äÀ» ÀÌÇØÇÑ´Ù.
- CÀÇ header fileÀ» ÀÌ¿ëÇÑ interface ÀÛ¼º¹ýÀ» °øºÎÇÑ´Ù.
- Ãß»óÈ(Abstraction)¿Í Á¤º¸Àº´Ð(Information Hiding)ÀÇ °³³äÀ» ÀÌÇØÇÑ´Ù.
- C programÀº functionµéÀÇ ÁýÇÕÀ¸·Î ±¸¼ºµÈ´Ù.
- C functionµéÀº ¸ðµÎ °°Àº file¿¡ ÀÖÀ» ÇÊ¿ä´Â ¾ø´Ù. ¿©·¯ °³ÀÇ file¿¡ ÀúÀåµÇ¾î °¢°¢ µ¶¸³ÀûÀ¸·Î compileµÇ°í
object fileµéÀÌ linkµÇ¾î ÇϳªÀÇ executable fileÀ» ¸¸µé ¼ö ÀÖ´Ù.
- ¿ÏÀüÇÑ ÇÁ·Î±×·¥ÀÇ ÀϺημ µ¶¸³µÈ file ¶Ç´Â fileµé¿¡
ÀúÀåµÇ´Â ÇÁ·Î±×·¥ ºÎºÐµéÀ» ¸ðµâ (module)À̶ó ÇÑ´Ù.
- °¢ ¸ðµâÀº ¼·Î °ü·ÃÀÌ ÀÖ´Â ±â´ÉÀ» ¼öÇàÇÏ´Â functionµé·Î ±¸¼ºµÇ¾î¾ß ÇÑ´Ù.
- º¹ÀâÇÏ°í ¾î·Á¿î ¹®Á¦ÀÇ ¸ðµâ ºÐÇØ´Â top-down designÀÇ ±âº»ÀÌ´Ù.
- ÇÁ·Î±×·¥À» ¸ðµâ·Î ºÐÇØÇÏ´Â ÀÛ¾÷Àº Ưº°ÇÑ ¼ÒÇÁÆ®¿þ¾î °øÇÐÀûÀÎ ±â¼ú°ú °æÇèÀ» ÇÊ¿ä·Î ÇÑ´Ù.
- ¼öÄ¡ °è»ê, Åë°è, ±×·¡ÇȽº, ¿µ»ó ó¸® µîÀ» À§ÇÑ
¸¹Àº ÇÁ·Î±×·¥µéÀÌ °³¹ßµÇ¾î »ç¿ëµÈ´Ù.
- ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ ÄÚµåµéÀº math library, statistics
library, graphics library, image processing library µî°ú °°ÀÌ
library·Î Á¦°øµÇ¸ç ÀÌ library¸¦ ±¸¼ºÇÏ´Â ÄÚµåµéÀ» ¸ð¾Æ package¶ó
ÇÑ´Ù.
- Package´Â library functionµéÀ» ÀÌ¿ëÇÑ abstraction ±â´ÉÀ» Á¦°øÇÑ´Ù.
- Library function °³¹ßÀÚ¸¦ implementor¶ó
ÇÏ°í »ç¿ëÀÚ¸¦ client¶ó ÇÑ´Ù.
- Client°¡ package¸¦ »ç¿ëÇϱâ À§Çؼ´Â
±× package¿¡ Á¤ÀÇµÈ interface¸¦ ÀÌ¿ëÇÏ¿©¾ß ÇÑ´Ù.
- C functionµéÀÇ interface´Â º¸Åë
header fileÀ» ÀÌ¿ëÇÏ¿© Á¤ÀÇÇϰí function ±â´ÉÀ» ¼öÇàÇÏ´Â programÀº
source code ¶Ç´Â object code·Î compileÇÏ¿© library ÇüÅÂÀÇ binary
code·Î Á¦°øµÈ´Ù.
- ƯÁ¤ ÀÀ¿ë ºÐ¾ß¿¡ ¸¹ÀÌ »ç¿ëµÇ´Â functionµéÀÇ ÁýÇÕÀ» Framework¶ó
ÇÑ´Ù.
- ±Ô¸ð°¡ Å©°í º¹ÀâÇÑ ÇÁ·Î±×·¥ °³¹ß ½Ã °¡´ÉÇϸé
±âÁ¸ framework¸¦ ÀÌ¿ëÇÑ´Ù. (Windows programming ¿¹) ¸¸ÀÏ ±âÁ¸
frameworkÀÌ ¾øÀ¸¸é »õ·Î °³¹ßÇÒ °ÍÀ» °ËÅäÇÑ´Ù.
- ÇÁ·Î±×·¥ °³¹ß ½Ã frameworkÀÌ Á¦°øÇÏ´Â ±â´ÉÀ»
Ȱ¿ëÇÏ¿© º¹ÀâÇÑ ÇÁ·Î±×·¥À» ±¸¼ºÇØ °£´Ù. (Bottom-up implementation)
¿¹)
main module: main functionÀ» Æ÷ÇÔÇÏ´Â ÇÁ·Î±×·¥ÀÇ ±âº» ¸ðµâ
graphics module: graphics °ü·Ã functionµé·Î ±¸¼ºµÈ ÇÁ·Î±×·¥ fileµé
communication module, text processing module, ...
main.c
----------------------
#include "module1.h"
#include "module2.h"
main()
{
ProcA();
ProcB();
}
module1.h module2.h
-------------- ---------------
void ProcA(void); void ProcB(void);
module1.c module2.c
-------------- ---------------
#include "module1.h" #include "module2.h"
void ProcA(void) void ProcB(void)
{ {
. . . . . .
} }
º¯¼öÀÇ »ç¿ë ¹üÀ§ (¿µÇâÀ» ¹ÌÄ¡´Â ¹üÀ§, scope), ¼ö¸í
- Function ³»ºÎ¿¡¼ÀÇ º¯¼ö »ç¿ë
- ÇÑ file ³»¿¡¼ÀÇ º¯¼ö »ç¿ë
- ¿©·¯ file »çÀÌÀÇ °øÀ¯ º¯¼ö »ç¿ë
Global variable (Àü¿ª º¯¼ö):
Function ¿ÜºÎ¿¡¼ Á¤ÀÇµÇ¾î ±× ÈÄ ¸ðµç function¿¡¼ »ç¿ë °¡´É.
ÇÁ·Î±×·¥ ¼öÇà ½Ã °è¼Ó Á¸Àç (¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ¾Æ ÇÁ·Î±×·¥ Á¾·á ½Ã±îÁö
»ç¿ë °¡´É)
- Global variableÀÇ °ú´ÙÇÑ »ç¿ëÀº ÇÁ·Î±×·¥À» ÀÌÇØÇÏ±â ¾î·Æ°Ô ¸¸µç´Ù.
- °¡´ÉÇÑ ÇÑ global variableÀÇ »ç¿ëÀ» ¾ïÁ¦ÇÏ¿© module°£ÀÇ µ¶¸³¼ºÀ» Å©°Ô ÇÑ´Ù.
Local variable (Áö¿ª º¯¼ö):
Function ³»ºÎ ¶Ç´Â block ³»¿¡¼ Á¤ÀÇµÇ¾î ±× function ¶Ç´Â block
³»¿¡¼¸¸ »ç¿ë °¡´É. Function ½ÇÇàÀÌ ³¡³ª¸é ÀÚµ¿ ¼Ò¸ê.
¿¹)
int g; // global variable g declaration
void func(void)
{
int i; // local variable i ¼±¾ð
. . .
}
Storage class - ÀÚ·á°¡ À¯ÁöµÇ¾î¾ß ÇÒ ±â°£ ¹× ¹üÀ§ °áÁ¤
- Storage class Á¤ÀÇ Çü½Ä: storage_class data_type variable_list;
Storage class Á¾·ù
- auto: automatic, default storage class (Ưº°ÇÑ Á¤Àǰ¡
¾øÀ¸¸é ÀÚµ¿À¸·Î auto·Î ÁöÁ¤)
- Function ³»ºÎ ¶Ç´Â block ³»¿¡¼ Á¤ÀÇµÇ¾î ±× function ¶Ç´Â
block ³»¿¡¼¸¸ »ç¿ë °¡´ÉÇÑ local variable. Function ½ÇÇàÀÌ ³¡³ª¸é
ÀÚµ¿ ¼Ò¸ê (±â¾ï Àå¼Ò¸¦ Àç»ç¿ë °¡´É)
- static: ±â¾ï Àå¼Ò¸¦ ¿µ±¸È÷ ÇÒ´ç
- static internal: function ³»ºÎ¿¡¼ Á¤ÀÇ, ³»ºÎ¿¡¼¸¸ »ç¿ë °¡´É
- static global: Á¤Àǰ¡ Æ÷ÇÔµÈ file ³»¿¡¼¸¸ »ç¿ë °¡´É
- extern: external, ´Ù¸¥ file¿¡¼ Á¤ÀÇµÈ global variable °øÀ¯
- register: °¡´ÉÇÑ ÇÑ CPU register ÀÌ¿ë (°í¼Ó ¼öÇàÀÌ
°¡´ÉÇÏ´Ù). ÄÄÇ»ÅÍ ±âÁ¾¿¡ µû¶ó »ç¿ë Á¦ÇÑ
¿¹)
static int g; // º¯¼ö g´Â ÀÌ º¯¼ö°¡ ¼±¾ðµÈ file ³»¿¡¼¸¸ »ç¿ë °¡´É
float f; // º¯¼ö f´Â ´Ù¸¥ file¿¡¼µµ ÂüÁ¶ °¡´É.
// ´Ü, extern float f; ¸¦ ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù.
void func1(void) // Function func1Àº ´Ù¸¥ file¿¡¼µµ È£Ãâ °¡´É.
// ´Ü, function prototypeÀ» Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÑ´Ù.
{
static int i; // º¯¼ö i´Â func1 ½ÇÇàÀÌ ³¡³ªµµ °ªÀ» À¯Áö.
int d; // º¯¼ö d´Â func1 ½ÇÇàÀÌ ³¡³ª¸é °ªÀ̼Ҹê
. . .
}
static func2(void) // Function func2´Â ´Ù¸¥ file¿¡¼ È£Ãâ ºÒ°¡´É
{
. . .
}
º¯¼öÀÇ ÃʱâÈ (Variable Initialization)
º¯¼ö´Â »ç¿ëÇϱâ Àü¿¡ ¹Ýµå½Ã ÃʱâÈÇÏ¿©¾ß ÇÑ´Ù.
ÃʱâÈÇÏÁö ¾ÊÀº auto¿Í register º¯¼ö´Â º¯¼ö¿¡ ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ ÀúÀåµÈ ÀÓÀÇÀÇ °ªÀ» »ç¿ëÇÑ´Ù.
ÃʱâÈÇÏÁö ¾ÊÀº global°ú static º¯¼ö´Â 0À¸·Î compile½Ã ÃʱâȵȴÙ.
º¯¼ö ÃʱâÈ ¿¹)
auto¿Í register º¯¼ö ÃʱâÈ: [ÀÚ·áÇü º¯¼ö¸í = ½Ä(expression)]
int a = 10;
char ch = 'A';
int b = a + ch;
global°ú static º¯¼ö ÃʱâÈ: [ÀÚ·áÇü º¯¼ö¸í = ¼ö½Ä(numeric expression)]
static int a = 10;
static double d = 3.141592;
int b = 10 * 20;
int c = a * b; // Wrong
int d = getchar(); // Wrong
¿©·¯ °³ÀÇ ¼·Î ¿¬°üµÈ ÀÚ·á¿¡ ´ëÇØ ƯÁ¤ °ªÀ» ºÎ¿©ÇÏ·Á¸é
¹æ¹ý 1) #define ¹® »ç¿ë
#define SUNDAY 0
#define MONDAY 1
#define TUESDAY 2
#define WEDNESDAY 3
#define THURSDAY 4
#define FRIDAY 5
#define SATURDAY 6
¹æ¹ý 2) Enumeration type »ç¿ë
enum { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
} ;
enum typeÀÇ Á¤ÀÇ : enum tag_name { list of elements };
enum variable Á¤ÀÇ : enum tag_name list of variables ;
enum tag_name { list of elements } list of variables
;
°¢°¢ÀÇ element¿¡ ƯÁ¤°ªÀ» ºÎ¿©ÇÒ ¼ö ÀÖ°í Æ¯Á¤ °ªÀ» ºÎ¿©ÇÏÁö ¾ÊÀ»
°æ¿ì ù¹øÂ° element¿¡ 0À» ¹èÁ¤ÇÏ°í ´ÙÀ½ element ºÎÅÍ 1 ¾¿ Áõ°¡.
¿¹)
enum MONTH { JAN = 1, FEB, MAR, ..., NOV, DEC };
enum MONTH BirthMonth, SalaryMonth, ... ;
Enumeration type°ú °°ÀÌ Çϳª, µÑ, ¼¿ ¼ö ÀÖ´Â ÇüÅÂÀÇ ÀڷḦ scalar
typeÀ̶ó ÇÑ´Ù. C¿¡¼ scalar typeµéÀº ÀÚµ¿ÀûÀ¸·Î integer·Î
󸮵ȴÙ. ±×·¯¹Ç·Î enum typeÀÇ elementµéµµ ¿¬»ê¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.
(±×·¯³ª »ó¼ö·Î Ãë±ÞµÇ±â ¶§¹®¿¡ »õ·Î¿î °ªÀ» assignÇÒ ¼ö ¾ø´Ù.)
Type Qualifiers : const, volatile
const : ƯÁ¤ º¯¼ö¸¦ »ó¼öó·³ Ãë±Þ. º¯¼ö °ªÀÌ ÃʱâÈ µÈ ÈÄ °ª º¯°æÀÌ ºÒ°¡´É.
¿¹) const int MAXVAL = 100;
#define MAXVAL 100 °úÀÇ Â÷ÀÌ´Â?
»õ·Î¿î data typeÀÇ Á¤ÀÇ : typedef
typedef data_structure type_name;
¿¹)
typedef unsigned char BYTE;
BYTE a, b, c;
typedef enum { FALSE, TRUE } bool;
bool x, y, z;
typedef char * string;
typedef enum { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,
Saturday } WEEK_DAY ;
½Ç½À) ´ÙÀ½°ú °°Àº »ê¼ö ±³À°¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇ϶ó.
ÀÓÀÇÀÇ µÎ ¼öÀÇ ´õÇϱ⠶Ǵ »©±â¸¦ ¿¬½ÀÇÑ´Ù. (´õÇϱ⠶Ǵ »©±â¸¦ ÀÓÀÇ·Î ¼±ÅÃ)
»ç¿ë ¿¹)
°è»êÇØ º¸¼¼¿ä. 23 + 5 ? 28
¸Â¾ÒÀ¾´Ï´Ù. Âü ÀßÇß¾î¿ä.
°è»êÇØ º¸¼¼¿ä. 35 - 17 ? 20
´Ù½Ã ÇØ º¸¼¼¿ä. 35 - 17 ? 18
¸Â¾ÒÀ¾´Ï´Ù. Âü ÀßÇß¾î¿ä.
°è»êÇØ º¸¼¼¿ä. 17 - 20 ? 20
´Ù½Ã ÇØ º¸¼¼¿ä. 17 - 20 ? 18
´Ù½Ã ÇØ º¸¼¼¿ä. 17 - 20 ? 0
´Ù½Ã ÇØ º¸¼¼¿ä. 17 - 20 ? -1
´Ù½Ã ÇØ º¸¼¼¿ä. 17 - 20 ? -3
¸Â¾ÒÀ¾´Ï´Ù. Âü ÀßÇß¾î¿ä.
°è»êÇØ º¸¼¼¿ä. 35 - 17 ? [ctrl-z]
Á¾·á
Assignment #7 (±â°£: 1ÁÖÀÏ)
À§ ÇÁ·Î±×·¥À» ÀúÇгâ¿ëÀ¸·Î ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ º¸¿ÏÇ϶ó.
- µÎ ¼ö¿Í °è»ê °á°ú°¡ ¸ðµÎ 1º¸´Ù´Â Å©°í 20 ÀÌÇÏÀÇ ¼öÀ̾î¾ß ÇÑ´Ù.
- Ʋ¸° Çлý¿¡°Ô´Â 3¹øÀÇ Àç ±âȸ¸¦ ÁÖ°í 3¹ø ¸ðµÎ Ʋ¸®¸é Á¤´äÀ» Ãâ·ÂÇÏ°í ´ÙÀ½ ¹®Á¦·Î ³Ñ¾î °£´Ù.
- ¸Â°Å³ª Ʋ·ÈÀ» ¶§ °¢°¢ 5°³ÀÇ ¼·Î ´Ù¸¥ ¹®Àå¿¡¼ ÀÓÀÇ·Î ¼±Åà Ãâ·ÂÇÑ´Ù.
10Àå (Pointer) ÀÐ¾î ¿À±â
[ Table Of Contents |
Previous Chapter |
Next Chapter]