8. Àü󸮱â¿Í ¸ÅÅ©·Î ÇÔ¼ö

8-1. Àü󸮱â(pre-processor)

- Àü󸮱â¶õ ¿ø½ÃÆÄÀÏÀ» ÄÄÆÄÀÏÇϱâ ÁÁµµ·Ï "°¡°ø"ÇÏ´Â ÀÛ¾÷À̶ó°í ÇÒ ¼ö ÀÖ´Ù. ±¸Ã¼ÀûÀ¸·Î ¸»Çϸé Àü󸮱â´Â ¿ø½ÃÆÄÀÏ ³»ÀÇ ¸ðµç Àü󸮱â Áö½ÃÀÚ¸¦ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Â CÀÇ ¹®ÀåÀ¸·Î Àü°³ÇÏ´Â ÀÛ¾÷À» ´ã´çÇϰí ÀÖ´Ù.

 (1) ¸ÅÅ©·Î Àü°³    : #define°ú #, ## ¿¬»êÀÚ
 (2) ¿ÜºÎ ÆÄÀÏ Æ÷ÇÔ : #include
 (3) Á¶°ÇºÎ ÄÄÆÄÀÏ  : #if, #ifdef, #ifndef, 
                      #else, #elif, #endif 
                      ¿Í defined ¿¬»êÀÚ   
 (4) ±âŸ           : #error, #line, #, #undef, #pragma   
#define printexpr1(expr) printf("expr=%d\n",expr)
#define printexpr2(expr) printf(#expr "=%d\n",expr)
#define x_n(x,n) (x##n)
void main()
{
   int x1,x2;
   
   printexpr1(3+1);
   printexpr2(3+1);
   x_n(x, 1)=100;
   x_n(x, 2)=200;
 
   printf("%d, %d",x1,x2);
}
<Àü°³µÈ ÈÄ>
void main()
{
     int x1,x2;
     printf("expr=%d\n"3+1);      /* ¸ÅÅ©·Î°¡ Àü°³µÇÁö ¾ÊÀ½ */
     printf("3+1" "=%d\n",3+1);      /* ¸ÅÅ©·Î°¡ Àü°³µÊ */
 
     (x1)=100;
     (x2)=200;
 
     printf("%d, %d",x1,x2);
}

(°á°ú)

expr=4
3+1=4
100, 200

¨ç ¸ÅÅ©·Î Àü°³

(1) #define ¹®Àº ¸ÅÅ©·Î »ó¼ö³ª ¸ÅÅ©·Î ÇÔ¼ö¸¦ Á¤ÀÇÇϴµ¥ »ç¿ëµÈ´Ù.

¸ÅÅ©·Î »ó¼öÀÇ Á¤Àǹæ¹ýÀº ´ÙÀ½°ú °°´Ù.

  #define <´ëÇ¥¹®ÀÚ> <¹Ù²î´Â ¹®ÀÚ>

  
    

¿¹) #define PI 3.14159

#define EOF (-1)

#define MAXINT 32767

¡¡

ÀÌó·³ #define ¹®À» »ç¿ëÇÑ ¸ÅÅ©·Î »ó¼ö´Â ±â¾ïÇϱâ Èûµç ¼öÄ¡³ª µ¥ÀÌÅ͵éÀ» ¾Ë¾Æº¸±â ½±°Ô ¸¸µé¾î ÁØ´Ù.

(2) ¿ø·¡ ¹®ÀÚ »ó¼ö³ª ¹®ÀÚ¿­ »ó¼ö ¾È¿¡¼­´Â ¸ÅÅ©·Î°¡ Àü°³µÇÁö ¾Ê´Â´Ù. ±×·¯³ª # ¿¬»êÀÚ¸¦ ½á¼­ ¹®ÀÚ¿­ ³»¿¡¼­ ¸ÅÅ©·Î°¡ Àü°³µÇ´Â °Í°ú °°Àº È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ´Ü, # ¿¬»êÀÚ´Â #define ¹®¿¡¼­¸¸ ¾²À̰í, ±×¿Ü¿£ ÀüÇô ¾²Áö ¸øÇÑ´Ù.

Turbo-C´Â ¹®ÀÚ¿­ »ó¼ö¸¦ ¾²´Âµ¥ À־ Ưº°ÇÑ ±â´ÉÀ» Á¦°øÇϴµ¥, ±× ±â´ÉÀ̶õ ¹®ÀÚ¿­ ´ÜÀ§°¡ ¿¬¼ÓÀûÀ¸·Î ³ª¿­µÇ¾î ÀÖÀ¸¸é Àüü·Î¼­ ÇϳªÀÇ ¹®ÀÚ¿­ »ó¼ö·Î ÀνÄÇÑ´Ù´Â °ÍÀÌ´Ù.

¹®ÀÚ¿­ ´ÜÀ§ »çÀÌ¿¡ °ø¹é¹®ÀÚ, Åǹ®ÀÚ, °³Ç๮ÀÚ, ÁÖ¼®¹® µîÀÌ À־ »ó°ü¾øÀÌ ÀνÄÇÑ´Ù.

ÀÌÁ¦ À§ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥À» »ìÆìº¸ÀÚ.

printexpr1() ÇÔ¼ö´Â ¹®ÀÚ¿­ ³»¿¡¼­ ¸ÅÅ©·Î°¡ Àü°³µÇÁö ¾Ê¾ÒÁö¸¸, printexpr2() ÇÔ¼ö´Â # ¿¬»êÀÚ¸¦ ½á¼­

   (#expr "=%d\n", expr) ==  ("3+1" "=%d\n", expr) == ("3+1=%d\n", expr)

°ú °°Àº °úÁ¤À» °ÅÃÄ ¹®ÀÚ¿­ ³»¿¡¼­ ¸ÅÅ©·Î°¡ Àü°³µÇ´Â °Í°ú °°Àº È¿°ú¸¦ ³ªÅ¸³»¾ú´Ù. ½ÇÁ¦·Î # ¿¬»êÀÚ´Â ½Ç¸Å°³ º¯¼ö¸¦ ±×´ë·Î ¹®ÀÚ¿­·Î ¸¸µé¾îÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±×·¯¹Ç·Î, # ¿¬»êÀÚÀÇ ±â´É°ú Turbo-CÀÇ ¹®ÀÚ¿­¿¡ ´ëÇÑ Æ¯º°ÇÑ ±â´ÉÀ» ÀûÀýÈ÷ ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿­ ³»¿¡¼­ÀÇ ¸ÅÅ©·Î Àü°³¿Í °°Àº ±â´ÉÀ» ±¸ÇöÇÑ °ÍÀÌ´Ù.

(3) Àü󸮱Ⱑ ## ¿¬»êÀÚ¸¦ ¸¸³ª¸é ## ¿¬»êÀÚ¿Í ±× ¾çÂÊ¿¡ ÀÖ´Â °ø¹é¹®ÀÚ¸¦ ¸ðµÎ Á¦°ÅÇØ ¹ö¸°´Ù.

µû¶ó¼­ ## ¿¬»êÀÚ ¾çÂÊÀ» ¼­·Î °áÇÕÇÏ´Â È¿°ú¸¦ °¡Á®¿Â´Ù.

¡¡

¨è ¿ÜºÎÆÄÀÏ Æ÷ÇÔ

 [1] #include 
 [2] #include "sys/stat.h"
 [3] #define HEADER "extgraph.h"
     #include HEADER

#include ¹®ÀÇ »ç¿ëÇüÅ 3°¡Áö¸¦ º¸¿´´Ù.

#include ¹®¿¡´Â Çì´õÆÄÀÏÀÇ °æ·Î¸¦ Æ÷ÇÔ½Ãų ¼öµµ ÀÖ°í, ¸ÅÅ©·Î »ó¼ö¸¦ ½á¼­ Çì´õ ÆÄÀϸíÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. Æ÷ÇԵǴ ¿ÜºÎÆÄÀÏÀº CÀÇ ¹®¹ý¿¡ ¸Â´Â ³»¿ëÀÇ ÅØ½ºÆ® ÆÄÀÏÀÌ¸é ¾Æ¹«°ÍÀ̳ª °¡´ÉÇÏ´Ù.

¡¡

¨é Á¶°ÇºÎ ÄÄÆÄÀÏ

Á¶°ÇºÎ ÄÄÆÄÀÏÀ̶õ, ¸» ±×´ë·Î ƯÁ¤ÇÑ Á¶°ÇÀÌ ¼º¸³µÉ ¶§³ª ¶Ç´Â ¼º¸³µÇÁö ¾ÊÀ» ¶§¿¡¸¸ ÁöÁ¤µÈ ¹üÀ§³»ÀÇ ¹®ÀåÀ» ÄÄÆÄÀÏÇϰųª ¶Ç´Â ±×³É ¹«½ÃÇϰí ÄÄÆÄÀÏÇÏÁö ¾Ê´Â °ÍÀ» ¸»ÇÑ´Ù.

Á¶°ÇºÎ ÄÄÆÄÀÏÀÇ ÁÖ¸ñÀûÀº ÇÁ·Î±×·¥ÀÇ È£È¯¼ºÀ» ³ôÀÌ´Â µ¥ ÀÖ´Ù. Á¶°ÇºÎ ÄÄÆÄÀÏÀÇ ½Ç·Ê´Â Ç¥ÁØ Çì´õÆÄÀÏ¿¡¼­ °¡Àå ¸¹ÀÌ Ã£¾Æº¼ ¼ö ÀÖ´Ù.

Á¶°ÇºÎ ÄÄÆÄÀÏÀ» À§ÇÑ Àü󸮱â Áö½ÃÀÚ´Â #if, #ifdef, #ifndef, #else, #elif, #endif µî ¸ðµÎ 6°¡Áö°¡ ÀÖ°í, ±×¹Û¿¡ Ưº°È÷ defined ¶ó´Â Àü󸮱â Áö½ÃÀÚ°¡ Áö¿øµÈ´Ù.

void main()
{
   #if defined(__TINY__)    /* TINY ¸Þ¸ð¸® ¸ðµ¨ÀÏ °æ¿ì ´ÙÀ½ ÇÑ ÁÙ¸¸ ÄÄÆÄÀÏ */
      printf("This is TINY memory model\n");
   #elif defined(__SMALL__) /* SMALL ¸Þ¸ð¸® ¸ðµ¨ÀÏ °æ¿ì ´ÙÀ½ ÇÑ ÁÙ¸¸ ÄÄÆÄÀÏ */
      printf("This is SMALL memory model\n");
   #else                    /* ±× ¿ÜÀÇ ¸Þ¸ð¸® ¸ðµ¨ÀÏ °æ¿ì ´ÙÀ½ ÇÑ ÁÙÀ» ÄÄÆÄÀÏ */
      printf("Other memory model\n");
   #endif
}

À§ÀÇ ¿¹Á¦¸¦ »ìÆìº¸ÀÚ. ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î µÇ¾îÀÖ´Ù. À̰ÍÀº if-else ¹®°ú ºñ½ÁÇØ º¸ÀÎ ´Ù. »ç½Ç ÇÏ´Â ¿ªÇÒÀº ºñ½ÁÇÏ´Ù. #elif ¹®°ú #else ¹®Àº »ý·«°¡´ÉÇÏ´Ù.

 #if »ó¼ö¼ö½Ä1
        ¹®Àå1
 #elif »ó¼ö¼ö½Ä2  
        ¹®Àå2
 #else  ¹®Àå3
 #endif

#if ¹®Àº »ó¼ö¼ö½Ä1ÀÌ ÂüÀÌ¸é ¹®Àå1À» ÄÄÆÄÀÏÇϰí, °ÅÁþÀÌ¸é ¹®Àå1À» ÄÄÆÄÀÏÇÏÁö ¾Ê´Â´Ù.

#elif ¹®Àº »ó¼ö¼ö½Ä1ÀÌ °ÅÁþÀÎ °æ¿ì »ó¼ö¼ö½Ä2¸¦ Æò°¡ÇÏ¿© ÂüÀÌ¸é ¹®Àå2¸¦ ÄÄÆÄÀÏÇϰí, °ÅÁþÀÌ¸é ¹®Àå2¸¦ ÄÄÆÄÀÏÇÏÁö ¾Ê´Â´Ù.

#else ¹®Àº »ó¼ö¼ö½Ä1°ú »ó¼ö¼ö½Ä2°¡ ¸ðµÎ °ÅÁþÀÎ °æ¿ì ¹®Àå3À» ÄÄÆÄÀÏÇÑ´Ù. ¸¸¾à »ó¼ö¼ö½Ä1À̳ª »ó¼ö¼ö½Ä2 Áß ¾î´À Çϳª¶óµµ ÂüÀÌ¸é ¹®Àå3Àº ÄÄÆÄÀϵÇÁö ¾Ê´Â´Ù.

#endif ¹®Àº #if ¹®ÀÇ ³¡À» ³ªÅ¸³»¸ç, ºü¶ß¸®¸é ¾ÈµÈ´Ù.

defined ¿¬»êÀÚ´Â defined (¸ÅÅ©·ÎÇü) ó·³ ¾²À̴µ¥, ¸ÅÅ©·Î°¡ Á¤ÀǵǾî ÀÖÀ¸¸é ³í¸®Àû Âü(°ªÀº 1)À¸·Î, Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¸é ³í¸®Àû °ÅÁþ(°ªÀº 0)À¸·Î Æò°¡ÇÑ´Ù.

´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ. #ifndef ¹®À» »ç¿ëÇÏ¿´´Ù.

#ifndef TRUE
#define FALSE 0
#define TRUE !FALSE
#endif

ifndef ´Â IF Not DEFine ÀÇ ¾àÀÚÀ̰í, ifdef ´Â IF DEFine ÀÇ ¾àÀÚÀÌ´Ù.

TRUE °°Àº ÀÏ»óÀûÀÎ define ¹®Àº ´Ù¸¥ °÷¿¡¼­ »ç¿ëµÇ¾úÀ» ¼öµµ ÀÖ´Ù. °°Àº defineÀ» µÎ ¹ø ÇÏ°Ô µÇ¸é ¿¡·¯°¡ ³ª¹Ç·Î, TRUE°¡ defineµÇÁö ¾Ê¾ÒÀ» °æ¿ì¿¡¸¸ defineÀ» ÇÏ°Ô ÇÑ´Ù.

´ÙÀ½Àº ³í¸®ÀûÀ¸·Î µ¿ÀÏÇÏ´Ù.

               #ifdef   MACRO  ==  #if  defined (MACRO)
             #ifndef  MACRO  ==  #if !defined (MACRO)

´ÙÀ½ÀÇ ¿¹Á¦´Â #ifdef ¹®À» ÀÌ¿ëÇÏ¿© Á¶°ÇºÎ ÄÄÆÄÀÏÀ» ÇÔÀ¸·Î¼­, µð¹ö±ë½Ã À¯¿ëÇÏ´Ù´Â ´ÜÀûÀÎ ¿¹¸¦ º¸À̰í ÀÖ´Ù.

#define DEBUG
 
void func(int a, int b)
{
   int c;
 
   c=(a++)+(b++);
   #ifdef DEBUG
      printf("i=%d, j=%d, c=%d\n",a,b,c);
   #endif
 }
 
void main(void)
{
   int i,j;
 
   #ifdef DEBUG
      printf("i=%d, j=%d\n", i, j);
   #endif
   i=5; j=8;
   func(i, j);
}

DEBUG ¶ó´Â ¸ÅÅ©·Î »ó¼ö°¡ Á¤ÀǵǾúÀ» °æ¿ì¿¡¸¸ ÇÔ¼ö¿¡¼­ °¢ º¯¼öµéÀÇ °ªÀ» Ãâ·ÂÇÑ´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀº º¯¼öµéÀÇ º¯È­¸¦ ÃßÀûÇÒ ¼ö ÀÖ°Ô ÇØÁÖ°í, ¹ö±×¸¦ ¸ðµÎ ÀâÀº ÈÄ ¸Ç À§ÀÇ #define DEBUG ¶ó´Â ÁÙÀ» ¾ø¾ÖÁÜÀ¸·Î½á Áß°£Áß°£¿¡ µð¹ö±×¸¦ À§ÇØ Á¸ÀçÇß´ø ºÎºÐµéÀº ÄÄÆÄÀϵÇÁö ¾Ê°í ½ÇÇàÆÄÀÏÀÌ ¸¸µé¾îÁø´Ù.

¹°·Ð, ÅëÇÕ È¯°æÀÇ watch âÀ» ÀÌ¿ëÇϸé ÀÌ·¯ÇÑ ±â´ÉÀÌ ÇÊ¿ä¾ø´Ù.

¡¡

¨ê ±âŸ Àü󸮱â Áö½ÃÀÚ

(1) #error

- »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù. ¿¡·¯¸Þ½ÃÁö¿¡ Å«µû¿ÈÇ¥´Â ¾²Áö ¾Ê´Â´Ù.

#error ¿¡·¯¸Þ½ÃÁö

#ifndef(__SMALL__)
#error Small Memory Model Needed.
#endif

Àü󸮱Ⱑ #error ¹®À» ¸¸³ª¸é ±× Áï½Ã ÄÄÆÄÀÏÀ» Áß´ÜÇϰí, »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ¿¡·¯¸Þ½ÃÁö¸¦ ³»º¸³»´Âµ¥, Àü󸮱â´Â #error ¹® ´ÙÀ½ÀÇ °ø¹éÀ» Á¦¿ÜÇÑ Ã¹¹®ÀÚºÎÅÍ ¿¡·¯¸Þ½ÃÁö·Î ÀνÄÇÑ´Ù.

(2) #line

- »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.

#line ¶óÀιøÈ£ "ÆÄÀϸí" ¶Ç´Â #line ¶óÀιøÈ£

#line ¹®Àº ±âÁ¤ÀÇ ¸ÅÅ©·Î»ó¼ö __LINE__ °ú __FILE__ À» °¢°¢ ¶óÀιøÈ£¿Í ÆÄÀϸíÀ¸·Î ¹Ù²Û´Ù. ÆÄÀϸíÀ» »ý·«Çϸé __FILE__ Àº ¹Ù²îÁö ¾Ê´Â´Ù.

#define MACRO
#ifdef MACRO
#line 0 "direct.c"  /* MACRO °¡ Á¤ÀǵǾî ÀÖÀ»¶§¸¸ ÄÄÆÄÀÏµÊ */
#endif
 
void main(void)
{
   printf("Line : %d, Filename : [%s]\n",__LINE__,__FILE__);
   #line 100 "main.c"
   printf("Line : %d, Filename : [%s]\n",__LINE__,__FILE__);
}
 
(¿¹»ó °á°ú)
Line : 5, Filename : [DIRECT.C]
Line : 101, Filename : [MAIN.C]
 
(½ÇÁ¦ °á°ú)
Line : 8, Filename : [C-TEST4.C]
Line : 10, Filename : [C-TEST4.C]

(¼³¸í)

#line, __LINE__, __FILE__ ÀÇ »ç¿ë¹ýÀ» º¸ÀÎ ¿¹ÀÌ´Ù.
ÀÌ ÆÄÀÏÀÇ À̸§Àº C-TEST4.C ÀÌ´Ù.
½ÇÁ¦·Î °á°ú´Â ¿¹»ó°ú ÀüÇô ´Ù¸£°Ô ³ª¿Ô´Ù.
#line Áö½ÃÀÚ°¡ ÀüÇô È¿°ú°¡ ¾ø´Â °ÍÀÌ´Ù.
¾Æ¸¶ Turbo-C 2.0ÀÇ ¹ö±×ÀÎ µíÇÏ´Ù.

(3) ³Î Áö½ÃÀÚ #

- ³Î Áö½ÃÀÚ # ´Â ±¸µÎÁ¡ # °¡ ´Üµ¶À¸·Î ¾²ÀÎ °ÍÀ̸ç, ¾Æ¹«°Íµµ ÇÏÁö¾Ê°í Àü󸮱⿡ ÀÇÇØ¼­ ±×³É ¹«½ÃµÈ´Ù. ³Î Áö½ÃÀÚ°¡ ¾²ÀÎ °÷Àº ¶óÀο¡ Æ÷ÇÔµÇÁö ¾Ê¾Æ __LINE__ »ó¼ö¿¡ ¶óÀÎÀ¸·Î ÀνĵÇÁö ¾Ê´Â´Ù.

(4) #undef

- #undef ´Â #define ¹®¿¡ ÀÇÇØ Á¤ÀÇµÈ ¸ÅÅ©·Î¸¦ Ãë¼ÒÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.

(5) #pragma

- ÄÄÆÄÀϽà °¢Á¾ ¿É¼ÇÀ» ÁÖ´Â ±â´ÉÀ» ÇÏ´Â °ÍÀε¥, ÀÚ¼¼ÇÑ ³»¿ëÀº User's Guide³ª Turbo C Programmer's GuideÀÇ ³»¿ëÀ» Âü°íÇÏ¸é µÈ´Ù.

  1. #pragma inline

    - ÀÌ ¸í·É¾î´Â ¸í·ÉÇà ÄÄÆÄÀÏ·¯ ¿É¼Ç Áß -B ¿É¼Ç°ú °°Àº ±â´ÉÀ» Çϴµ¥, ÄÄÆÄÀÏ·¯¿¡°Ô ¼Ò½º ÇÁ·Î±×·¥¿¡ ÀζóÀÎ ¾î¼Àºí¸®°¡ ÀÖ´Ù´Â °ÍÀ» ¾Ë·ÁÁÖ´Â °ÍÀÌ´Ù.

    ÀζóÀÎ ¾î¼Àºí¸®¶õ C ¼Ò½º ÇÁ·Î±×·¥ ¾È¿¡ ÀϺΠ·çƾÀ» ºü¸¥ ¼Óµµ·Î ó¸®Çϱâ À§ÇØ ¾î¼Àºí¸® Äڵ带 Á÷Á¢ »ç¿ëÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù.

    ÀÌ¿Í °°Àº °æ¿ì ÆÄÀÏÀÇ ¼±µÎ¿¡ #pragma inline °ú °°Àº ¶óÀÎÀ» µÒÀ¸·Î½á ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë¸± ¼ö ÀÖ´Ù.

    Turbo-C ÅëÇÕȯ°æ ³»¿¡¼­´Â ÀζóÀÎ ¾î¼Àºí¸®°¡ µé¾î°£ ¼Ò½º´Â ÄÄÆÄÀÏ ÇÒ ¼ö ¾øÀ¸¸ç, ¸í·ÉÇà ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏÀ» ÇØ¾ß ÇÑ´Ù. C++¿¡¼­´Â ÅëÇÕȯ°æ ³»¿¡¼­µµ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù.

  2. #pragma warn

    - À̰ÍÀº ÄÄÆÄÀϽà ¹ß»ýÇÏ´Â °æ°í ¿¡·¯(warning error)¸¦ Á¦¾îÇÏ´Â Áö½ÃÀÚÀÌ´Ù. ±× Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

                            #pragma warn +xxx
                         #pragma warn -xxx
                             #pragma warn .xxx    
  3. #pragma savereges

    - ÀÌ´Â huge ÇÔ¼ö°¡ ½ÇÇàµÇ¾úÀ» ¶§, ¾î¶² ·¹Áö½ºÅÍÀÇ °ªµµ ¹Ù²îÁö ¾Ê°Ô Çϱâ À§ÇÑ °ÍÀÌ´Ù. À̰ÍÀº ¶§¶§·Î ¾î¼Àºí¸® ¾ð¾î ÄÚµå¿Í ÀÎÅÍÆäÀ̽º ÇϰíÀÚ ÇÒ ¶§ ¿ä±¸µÈ´Ù. ÀÌ Áö½ÃÀÚ´Â ÇÔ¼öÀÇ Á¤ÀǺκР¹Ù·Î À§¿¡ ¼±¾ðÇØ µÎ¾î¾ß ÇÑ´Ù.

8-2. ±âÁ¤ÀÇ ¸ÅÅ©·Î »ó¼ö

- Turbo-C 2.0 ¿¡´Â ´ÙÀ½°ú °°Àº 15°³ÀÇ ±âÁ¤ÀÇ ¸ÅÅ©·Î »ó¼ö°¡ ÀÖ´Ù. ±âÁ¤ÀÇ ¸ÅÅ©·Î »ó¼ö´Â ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ #define¹®À¸·Î Á¤ÀÇÇØÁÖÁö ¾Ê¾Æµµ ÀÌ¹Ì Á¤ÀǵǾî ÀÖ´Â ¸ÅÅ©·Î »ó¼öµéÀÌ´Ù.
ÀÌ ¸ÅÅ©·Î »ó¼öµéÀº #define¹®À̳ª #undef¹®¿¡ ¾²ÀÏ ¼ö ¾ø´Ù. µû¶ó¼­ ÇÁ·Î±×·¥ ³»¿¡¼­ ÂüÁ¶¸¸ÀÌ °¡´ÉÇÏ°í ¼öÁ¤Àº ºÒ°¡´ÉÇÏ´Ù. ´Ù¸¸ __FILE__ °ú __LINE__ ¸¸Àº #line¹®À» ½á¼­ º¯°æÇÒ ¼ö ÀÖ´Ù. (Turbo-C 2.0¿¡¼­´Â ¹ö±×·Î ÀÎÇØ º¯°æÀÌ µÇÁö ¾Ê´Â´Ù.)

  1) __LINE__   : Àü󸮱Ⱑ ¼öÇàÇÏ´Â ÇöÀç ¶óÀÎÀÇ ¹øÈ£
  2) __FILE__   : Àü󸮱Ⱑ ¼öÇàÇÏ´Â ÆÄÀÏÀÇ À̸§
  3) __DATE__   : Àü󸮱Ⱑ ¼öÇàÇÏ´Â ÆÄÀÏÀÌ ¸¸µé¾îÁø ³¯Â¥
  4) __TIME__   : Àü󸮱Ⱑ ¼öÇàÇÏ´Â ÆÄÀÏÀÌ ¸¸µé¾îÁø ½Ã°£
  5) __STDC__   : ÄÄÆÄÀϽà ANSI ¿É¼ÇÀ» ÁÖ¸é ÀÌ »ó¼ö´Â 1·Î Á¤Àǵǰí,
                 ±×·¸Áö ¾ÊÀ¸¸é Á¤ÀǵÇÁö ¾Ê´Â´Ù.
  6) __TURBOC__ : Turbo-CÀÇ ¹öÀüÀ» 16Áø¼ö·Î ³ªÅ¸³½´Ù.
                 Turbo-C 2.0 ¿¡¼­´Â ¹ö±×·Î ÀÎÇØ 0x18d ¶ó´Â ÀÌ»óÇÑ ¼ö°¡
                 Ãâ·ÂµÈ´Ù.
  7) __PASCAL__ : ÄÄÆÄÀϽà -p ¿É¼ÇÀ» ÁÖ¸é 1·Î Á¤ÀǵǸç, ±×·¸Áö ¾ÊÀ¸¸é
                 Á¤ÀǵÇÁö ¾Ê´Â´Ù.
  8) __CDECL__  : __PASCAL__ °ú ¹Ý´ë·Î ÄÄÆÄÀϽà -p ¿É¼ÇÀ» ÁÖÁö ¾ÊÀ¸¸é
                 1·Î Á¤ÀǵǸç, ±×·¸Áö ¾ÊÀ¸¸é Á¤ÀǵÇÁö ¾Ê´Â´Ù.
  9) __MSDOS__  : ¸ðµç ÄÄÆÄÀÏ¿¡ ´ëÇØ¼­ 1À̶ó´Â »ó¼ö¸¦ Á¦°ø
 10) __TINY__       --+
 11) __SMALL__        |   ÇöÀçÀÇ ¸Þ¸ð¸® ¸ðµ¨À» Á¤ÀÇÇÏ´Â »ó¼ö
 12) __MEDIUM__       |   ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó ÇϳªÀÇ »ó¼ö¸¸ÀÌ 1·Î Á¤ÀǵÊ
 13) __COMPACT__      |
 14) __LARGE__        |
 15) __HUGE__      ---+

¡¡

8-3. ¸ÅÅ©·Î ÇÔ¼ö

A) ¸ÅÅ©·Î ÇÔ¼ö¿¡ ´ëÇØ...

- #define¹®À» ÀÌ¿ëÇÏ¿© ÇÔ¼ö¿Í °°Àº ±â´ÉÀ» ÇÏ´Â °ÍÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ·¸°Ô 'ÇÔ¼ö¿Í °°Àº ±â´ÉÀ» ÇÏ´Â °Í'À̶ó°í ¸»ÇÏ´Â ÀÌÀ¯´Â ¾ö°ÝÈ÷ ¸»Çؼ­, ¸ÅÅ©·Î ÇÔ¼ö´Â ÇÔ¼ö°¡ ¾Æ´Ï°í ´ÜÁö ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô »ç¿ëµÇ±â ¶§¹®ÀÌ´Ù.

´ÙÀ½Àº ¸ÅÅ©·Î ÇÔ¼öÀÇ ÀÛ¼º ¿¹ÀÌ´Ù.

   #define MAX(x,y) ((x)>(y) ? (x) : (y))   /* ÃÖ´ë°ªÀ» ±¸ÇÏ´Â ¸ÅÅ©·Î ÇÔ¼ö */
   #define ABS(x) ((x)<0 ? -(x) : (x))      /* Àý´ë°ªÀ» ±¸ÇÏ´Â ¸ÅÅ©·Î ÇÔ¼ö */
   #define SQR(x) ((x)*(x))                 /* Á¦°ö°ªÀ» ±¸ÇÏ´Â ¸ÅÅ©·Î ÇÔ¼ö */
   #define UPCASE(c) (( (c)>='a' && (c)<='z') ? (c)-('a'-'A') : (c) )
           /* ¼Ò¹®ÀÚ¸¦ ´ë¹®ÀÚ·Î ¹Ù²Ù´Â ¸ÅÅ©·Î ÇÔ¼ö */       
   #define LOCASE(c) (( (c)>='A' && (c)<='Z') ? (c)+('a'-'A') : (c) )
           /* ´ë¹®ÀÚ¸¦ ¼Ò¹®ÀÚ·Î ¹Ù²Ù´Â ¸ÅÅ©·Î ÇÔ¼ö */

- ¾Æ½ºÅ° ÄÚµå »ó¿¡¼­ ¹®ÀÚÀÇ À§Ä¡¸¦ º¸¸é ´ë¹®ÀÚ°¡ ¸ÕÀú ÀÖ°í, ±× µÚ¿¡ ¿¬¼ÓÀûÀ¸·Î ¼Ò¹®ÀÚ°¡ ³ª¿­µÇ¾î ÀÖ´Ù. ´ë¹®ÀÚ¸¦ ¼Ò¹®ÀÚ·Î, ¶Ç´Â ¼Ò¹®ÀÚ¸¦ ´ë¹®ÀÚ·Î ¹Ù²Ù´Â °ÍÀº ´ÙÀ½ ¿¬»ê¿¡ ÀÇÇØ¼­ ÇØ°áÇÒ ¼ö ÀÖ´Ù.

         * ¼Ò¹®ÀÚ -  ´ë¹®ÀÚ : (¼Ò¹®ÀÚ) - ('a'-'A')
        * ´ë¹®ÀÚ -  ¼Ò¹®ÀÚ : (´ë¹®ÀÚ) + ('a'-'A')

ÀÌ ¿¬»êÀÇ ¿ø¸®´Â ¼Ò¹®ÀÚ¸¦ ´ë¹®ÀÚ·Î ¹Ù²Ù´Â °æ¿ì ±× ¼Ò¹®ÀÚ¿¡, ¼Ò¹®ÀÚ¿Í ´ë¹®ÀÚÀÇ Â÷ÀÌ¿¡ ÇØ´çÇÏ´Â ¼ö¸¦ »©ÁÜÀ¸·Î½á ´ë¹®ÀÚ·Î ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

¿Ö³ÄÇÏ¸é ¾Æ½ºÅ° ÄÚµå´Â µÚ·Î °¥¼ö·Î ¼ö°¡ Ä¿Áö°í, ´ë¹®ÀÚº¸´Ù ¼Ò¹®ÀÚ°¡ µÚÂÊ¿¡ À§Ä¡Çϱ⠶§¹®¿¡ ±× Â÷À̸¸Å­ÀÇ ¼ö¸¦ »©ÁÖ¸é ´ë¹®ÀÚÀÇ ¾Æ½ºÅ° Äڵ尡 µÇ±â ¶§¹®ÀÌ´Ù.

´ÙÀ½Àº À̰ÍÀ» ÀÌ¿ëÇØ¼­ ½ÇÁ¦·Î ÀÛ¼ºµÈ ¸ÅÅ©·Î ÇÔ¼öÀÌ´Ù.

          #define UPCASE(c) (c)-('a'-'A')
         #define LOCASE(c) (c)+('a'-'A')

±×·±µ¥, ¸¸¾à ÀԷµǴ ¹®ÀÚ°¡ ´ë¹®ÀÚµµ ¼Ò¹®ÀÚµµ ¾Æ´Ñ °æ¿ì¿£ ¾û¶×ÇÑ °á°ú°¡ ³ª¿À°Ô µÈ´Ù.

±×·¯¹Ç·Î ±×·¯ÇÑ °æ¿ì¿¡´Â ±× ¹®ÀÚ¸¦ ±×´ë·Î Ãâ·ÂÇÏ°Ô ¸¸µé¸é µÈ´Ù. ±× °á°ú ¿ÏÀüÇÏ°Ô ¸¸µé¾îÁø ¸ÅÅ©·Î ÇÔ¼ö´Â À§ÀÇ ¸ÅÅ©·Î ÇÔ¼öÀÇ ¿¹¿¡ ³ª¿ÍÀÖ´Ù.

B) ¸ÅÅ©·Î ÇÔ¼ö Á¤Àǽà ÁÖÀÇÇÒ Á¡

¨ç ¸ÅÅ©·Î ÇÔ¼ö¿¡ »ç¿ëµÇ´Â ¸ðµç ÀÎÀÚ¿¡´Â ¹Ýµå½Ã °ýÈ£¸¦ ÇØµÎ´Â °ÍÀÌ ¾ÈÀüÇÑ Á¤Àǹæ¹ýÀÌ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½ÀÇ ¸ÅÅ©·Î ÇÔ¼ö¸¦ º¸ÀÚ.

ÀÌ °æ¿ì °ýÈ£¸¦ »ç¿ëÇÏÁö ¾Ê°í Á¤ÀÇÇÑ °ÍÀ¸·Î, ºÎÀÛ¿ëÀÌ ¹ß»ýÇÑ °ÍÀÌ´Ù. À§ ¸ÅÅ©·Î ÇÔ¼öÀÇ Àü°³ Èĸ¦ º¸¸é ¾Ë°ÚÁö¸¸, °á°ú´Â ¿¹»óÇß´ø 21ÀÌ ¾Æ´Ï¶ó 11ÀÌ ³ª¿Â´Ù. ÀÌ·¯ÇÑ ºÎÀÛ¿ëÀ» ¹æÁöÇϱâ À§ÇØ °¡´ÉÇÏ¸é ¸ðµç ÀÎÀÚ¿¡ °ýÈ£¸¦ ÇØµÎ´Â °ÍÀÌ ÁÁ´Ù.

¨è ¸ÅÅ©·Î ÇÔ¼ö ³»¿¡¼­´Â ´ÜÀÏ ¿¬»êÀÚÀÎ Áõ°¡ ¿¬»êÀÚ(++) ¶Ç´Â °¨¼Ò ¿¬»êÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ.

#define SQR(x) ((x)*(x))

        

void main()

{

int i=2;

printf("%d\n", SQR(++i));

}

ÀÌ·¸°Ô ¸ÅÅ©·Î ÇÔ¼ö SQR()À» Á¤ÀÇÇϰí, ¸Å°³º¯¼ö·Î ++i ¸¦ ÁÖ¾úÀ» ¶§ Àü°³ °á°ú´Â ´ÙÀ½°ú °°´Ù.

¡¡

              printf("%d\n", (++i)*(++i));

¡¡

À̸¦ º¸¸é ¾Ë°ÚÁö¸¸ Áõ°¡ ¿¬»êÀÚ°¡ ÇÑ ¹®Àå ¾È¿¡¼­ µ¿½Ã¿¡ ¾²¿´´Ù.

¿øÇÏ´Â ³»¿ëÀº i °¡ 1Áõ°¡ÇÏ´Â °ÍÀÌÁö¸¸ ½ÇÁ¦·Î´Â 2°¡ Áõ°¡ÇÏ°Ô µÈ °ÍÀÌ´Ù.

½ÇÁ¦·Î °á°ú°ªÀº 3*4==12 °¡ ³ª¿Â´Ù.

¡¡

C) ¸ÅÅ©·Î ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯

- ¸ÅÅ©·Î ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â °£´ÜÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§ ±»ÀÌ ½ÇÁ¦ÀÇ ÇÔ¼ö¸¦ ¸¸µéÁö ¾Ê°í, ¸ÅÅ©·Î ÇÔ¼ö·Î ¸¸µé¾î »ç¿ëÇÔÀ¸·Î½á º¸´Ù °£´ÜÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð º¹ÀâÇÑ ±â´ÉÀ» °¡Áö´Â ÇÔ¼öµéÀº ¸ÅÅ©·Î ÇÔ¼ö·Î ¸¸µé ¼ö ¾ø°ÚÁö¸¸, °£´ÜÇÑ ¿¬»êÀ» ÇÏ´Â Á¤µµÀÇ ÇÔ¼ö´Â ¸ÅÅ©·Î ÇÔ¼ö·Î ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù. °¡·É °£´ÜÇÑ ¿¬»êÀ» ÇÏ´Â ÇÔ¼ö°¡ ±²ÀåÈ÷ ºó¹øÇÏ°Ô ÇÁ·Î±×·¥ °÷°÷¿¡¼­ È£ÃâµÈ´Ù°í »ý°¢ÇØ º¸ÀÚ. ÇÔ¼ö°¡ È£ÃâµÉ ¶§ »ý±â´Â ¿©·¯ °¡Áö ÀÛ¾÷µé(¿¹¸¦ µé¾î ÀÚµ¿º¯¼ö¸¦ ¸¸µé¾ú´Ù ¾ø¾Ö´Â µîÀÇ ÀÛ¾÷) ¶§¹®¿¡ »ó´çÈ÷ ¸¹Àº ½Ã°£À» ¼ÒºñÇÏ°Ô µÈ´Ù. ƯÈ÷ ¹Ýº¹¹® ¾È¿¡¼­ ±× ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÇ¸é, ±× ½Ã°£Àº ´õ¿í ±æ¾îÁø´Ù. ÇÏÁö¸¸ ÀÌ·± ÇÔ¼ö¸¦ ¸ÅÅ©·Î ÇÔ¼ö·Î ¹Ù²Ù°Ô µÇ¸é, ½ÇÁ¦ÀûÀ¸·Î ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÀÏÀÌ ¾ø¾î¼­ ºü¸¥ ½Ã°£¿¡ ÀÛ¾÷À» ó¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

¹°·Ð ´ÜÁ¡µµ Àִµ¥, ÇÔ¼ö´Â ÇϳªÀÇ ·çƾÀ» °è¼Ó ºÒ·¯¼­ »ç¿ëÇÏÁö¸¸ ¸ÅÅ©·Î ÇÔ¼ö´Â ¸ðµÎ ġȯÀÌ µÇ±â ¶§¹®¿¡ ½ÇÇà ÆÄÀÏÀÇ Å©±â°¡ Ä¿Áú ¼öµµ ÀÖ´Ù.

D) ¸ÅÅ©·Î ÇÔ¼öÀÇ ¿ëµµ

¨ç Áߺ¹µÇ´Â ¼ö½ÄÀ» ¸ÅÅ©·Î ÇÔ¼ö·Î °£°áÇÏ°Ô ±â¼ú

- ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ƯÁ¤ ¼ö½ÄÀÌ °è¼ÓÇØ¼­ ¾²ÀÌ´Â °æ¿ì°¡ Àִµ¥, À̰ÍÀ» µû·Î ÇÔ¼ö·Î ¸¸µé¾î ¾²ÀÚ´Ï ½ÇÇà¼Óµµ°¡ ¹®Á¦µÉ °Í °°°í, ±×´ë·Î ¼ö½ÄÀ¸·Î ¾²ÀÚ´Ï ÇÁ·Î±×·¥ÀÌ ³Ê¹« º¹ÀâÇØ Áú °Í °°Àº »óȲ¿¡¼­, ÀÌ·¯ÇÑ ¼ö½ÄÀ» ¸ÅÅ©·Î ÇÔ¼ö·Î ġȯÇÏ¸é ¼Ò½º°¡ ÆÇµ¶Çϱ⠽±°í °£°áÇØÁø´Ù.

¨è Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öÀÇ Æ¯Á¤ ½Ç¸Å°³º¯¼ö¸¦ ƯÁ¤ °ªÀ¸·Î ÁöÁ¤ÇÑ °æ¿ì

- ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Ù º¸¸é Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öÀÇ Æ¯Á¤ÇÑ ¸Å°³º¯¼ö¸¦ Ç×»ó Æ¯Á¤ÇÑ °ªÀ¸·Î ÁöÁ¤ÇÏ¿© ¾²´Â °æ¿ì°¡ ¸¹´Ù. ¿¹¸¦ µé¾î HGC¿¡¼­´Â floodfill() ÇÔ¼öÀÇ 3¹øÂ° ¸Å°³º¯¼ö°¡ Ç×»ó 1ÀÏ ¼ö ¹Û¿¡ ¾ø´Ù. ÀÌó·³ floodfill(x, y, 1) °ú °°ÀÌ ¸Å¹ø 1À̶ó´Â °ªÀ» ÁöÁ¤ÇØ ÁֱⰡ ¹ø°Å·¯¿ï ¶§ ¸ÅÅ©·Î ÇÔ¼ö¸¦ ¾²¸é µÈ´Ù.

     #define  paint(x, y)  floodfill(x, y, 1)>

¨é ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇüÀ» Á¦ÇÑÇÏ°í ½ÍÁö ¾ÊÀ» ¶§

- ½ÇÁ¦ÇÔ¼ö´Â ½Ç¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇüÀÌ Á¦ÇѵǾî ÀÖÁö¸¸, ¸ÅÅ©·Î ÇÔ¼ö´Â µ¥ÀÌÅÍÇüÀÌ Á¦ÇѵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î ¸ðµç µ¥ÀÌÅÍÇüÀ» ¸Å°³º¯¼ö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

8-4. typedef ¹®

typedef¹®Àº »õ·Î¿î ÇüÀ» Á¤ÀÇÇϴµ¥ ¾²ÀδÙ. ¿¹¸¦ µé¾î unsigned char ÇüÀº Çü À̸§ÀÌ ±æ¾î¼­ ºÒÆíÇÏ´Ù°í ´À²¸Áú ¼öµµ ÀÖ´Ù. ÀÌ·² ¶§ typedef¹®À» »ç¿ëÇØ¼­ byteÇüÀ̶ó°í °£´ÜÈ÷ Á¤ÀÇÇØ ¹ö¸®¸é Æí¸®ÇÏ´Ù. ¾Æ·¡¿¡ typedef¹®ÀÇ ¼±¾ðÇü½ÄÀ» ¼³¸íÇÏ¿´´Ù.

typedef <¿©·¯°¡Áö ÀÚ·áÇü> <´ëÇ¥ÇÏ´Â ÀÚ·áÇü>

* <¿©·¯°¡Áö ÀÚ·áÇü> Àº Turbo-C°¡ Áö¿øÇÏ´Â ¸ðµç ÀÚ·áÇüÀÌ ¿Ã ¼ö ÀÖ´Ù.

* <´ëÇ¥ÇÏ´Â ÀÚ·áÇü> Àº »ç¿ëÀÚ°¡ ÀÓÀÇ·Î Á¤Çϰí, ³ªÁß¿¡ º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ »ç¿ëÇÑ´Ù.

* ´ÙÀ½Àº ÀÚÁÖ ¾²ÀÌ´Â ÇüÁ¤ÀǵéÀÌ´Ù.

boolean Çü typedef enum {false, true} boolean;

byte Çü typedef unsigned char byte;

word Çü typedef unsigned word;

typedef¹®À» ¸¶±¸ ³²¿ëÇÏ¸é ¿ÀÈ÷·Á µ¥ÀÌÅÍÇüÀÇ È¥µ¿À» °¡Á®¿À¹Ç·Î, µÇµµ·Ï ´ë´ÜÈ÷ º¹ÀâÇÑ µ¥ÀÌÅÍÇü(¿­°ÅÇü, ±¸Á¶Ã¼Çü, °ø¿ëüÇü °°Àº °æ¿ì)¿¡¸¸ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

¡¡

8-5. ¿­°ÅÇü µ¥ÀÌÅÍ

ÀÌ ±Û óÀ½ºÎºÐÀÇ µ¥ÀÌÅÍÇüÀ» º¸¸é ¼³¸í¾øÀÌ ³Ñ¾î°£ ¿­°ÅÇüÀÌ ÀÖ°í, »ó¼ö¿¡ º¸¸é ¿­°Å»ó¼ö°¡ ÀÖ´Ù. ¿­°ÅÇü(enumerated type)Àº ±×·¯ÇÑ ¿­°Å»ó¼ö(==¿­°Å¸â¹ö)µéÀÇ ¸ðÀÓÀ̶ó°í º¼ ¼ö ÀÖ´Ù. ¿­°ÅÇüÀ» enumÇüÀ̶ó°í ºÎ¸£±âµµ ÇÑ´Ù.

¿­°ÅÇü »ó¼öÀÇ ¼±¾ð¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

enum {¸â¹ö1, ¸â¹ö2, . . . } ¿­°ÅÇü º¯¼ö1, ¿­°ÅÇü º¯¼ö2, . . .

À§¿¡¼­ ¸â¹ö´Â ¹®¸Æ¿¡ µû¶ó ¿­°Å¸â¹ö¶ó°í ºÒ¸®±âµµ Çϰí, ¿­°Å»ó¼ö·Î ºÒ¸®±âµµ ÇÑ´Ù. ¿­°Å¸â¹ö¸¦ ¿­°Å»ó¼ö¶ó°íµµ ºÎ¸£´Â ÀÌÀ¯´Â ¿­°Å¸â¹ö°¡ ÇÁ·Î±×·¥ ³»¿¡¼­´Â ¸ÅÅ©·Î »ó¼ö¿Í °ÅÀÇ µ¿µîÇÏ°Ô »ç¿ëµÇ±â ¶§¹®ÀÌ´Ù. Áï, ¿­°Å¸â¹ö´Â Á¤¼ö»ó¼öÀÇ ±âÈ£Àû Ç¥ÇöÀÌ¶ó º¸¸é µÈ´Ù.

¿­°ÅÇü »ó¼ö´Â »ç¿ëÀÚ°¡ ÀÓÀÇ·Î °ªÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ°í, ¿­°ÅÇü »ó¼öÀÇ Ã¹ ¹øÂ° °ªÀ» ÀÓÀÇ·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.

void main()
{
   enum {zero,one,two,three,four,       \\
         five,six,seven,eight,nine,ten} number;
 
   number=one+six;   /* ¿­°ÅÇü »ó¼ö¸¦ ÀÌ¿ëÇØ µ¡¼ÀÀ» ÇÔ */
   printf("One+Six=%d\n",number);
}

À§ÀÇ ¿¹¿¡¼­µµ º¼ ¼ö ÀÖµíÀÌ ¿­°ÅÇü »ó¼ö´Â ÀÏ¹Ý ¼ö½Ä¿¡¼­ Á¤¼öÇü »ó¼öó·³ ¾²À̸ç, int ÇüÀ¸·Î ÀÚµ¿º¯È¯µÈ´Ù. (enum ÇüÀÌ ºÎÈ£¾ø´Â ÇüÀ̸é unsignedÇüÀ¸·Î º¯È¯µÇ±âµµ ÇÑ´Ù.)

±×·±µ¥, À§ ¿¹Á¦¿Í °°Àº ¿­°ÅÇü »ó¼ö ¼±¾ðÀº ÇÑ °¡Áö ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ¿­°ÅÇü »ó¼ö¸¦ ÀνÄÇϴµ¥ ¼±¾ðµÈ ±× ÇÔ¼ö¿¡¸¸ ±¹Çѵȴٴ °ÍÀÌ´Ù. ±×·¡¼­, ´Ù¸¥ ÇÔ¼ö¿¡¼­´Â °°Àº ¿­°ÅÇü »ó¼ö¸¦ ¾µ ¼ö ¾ø´Ù´Â °á°ú°¡ ³ª¿Â´Ù. (¼±¾ðÀº Áߺ¹µÉ ¼ö À־, Á¤ÀÇ´Â Áߺ¹µÉ ¼ö ¾øÀ¸¹Ç·Î)

ÀÌ ¹®Á¦´Â ¿­°ÅÇü »ó¼ö¸¦ ´Ù¸¥ ¹æ¹ýÀ¸·Î ¼±¾ðÇÔÀ¸·Î½á ÇØ°áÇÒ ¼ö ÀÖ´Ù.

¨ç ¿­°ÅÅÿ¡ ÀÇÇÑ ¼±¾ð

enum ¿­°ÅÅÃ {¿­°ÅÇü »ó¼ö1, ¿­°ÅÇü »ó¼ö2, . . . };

enum ¿­°ÅÅà ¿­°ÅÇü º¯¼ö1, ¿­°ÅÇü º¯¼ö2, . . . ;

ÀÌ ¼±¾ð¹æ¹ýÀº À§¿¡¼­ ¿­°ÅÇü º¯¼öÀÇ ¼±¾ðÇüŸ¦ ¼±¾ðÇϰí, ¾Æ·¡¿¡¼­ µÎ ¹øÂ° ¶óÀÎÀÇ ¹æ¹ýÀ¸·Î ½ÇÁ¦ÀûÀÎ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀÌ´Ù.

¡¡

#include <stdlib.h>
 
enum su {zero,one,two,three,four,five,six,seven,eight,nine,ten};
 
void test(void);
 
void main()
{
   enum su a;   /* ¿­°ÅÇü ÅÃÀ» ÀÌ¿ëÇØ¼­ ¿­°ÅÇü º¯¼ö a¸¦ ¼±¾ð */
 
   a=one+six;    /* ¿­°ÅÇü »ó¼ö¸¦ ÀÌ¿ëÇØ µ¡¼ÀÀ» ÇÔ */
   printf("One+Six=%d\n",a);
   test();
}
 
void test(void)
{
   enum su b;   /* ¿­°ÅÇü ÅÃÀ» ÀÌ¿ëÇØ¼­ ¿­°ÅÇü º¯¼ö b¸¦ ¼±¾ð */
   b=two+five;
   printf("One+Five=%d\n",b);
}

¡¡

¨è typedef¹®À» ÀÌ¿ëÇÑ ¼±¾ð ÀÌ ¹æ¹ýÀº tytpedef¹®À» ÀÌ¿ëÇØ¼­ ¿­°ÅÇüÀ» ¼±¾ðÇÏ´Â »õ·Î¿î µ¥ÀÌÅÍÇüÀ» ¸¸µé¾î »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

¡¡

typedef enum {zero,one,two,three,four,five,         \\
              six,seven,eight,nine,ten} number;
/* enumÇüÀ» ¼±¾ðÇÏ´Â »õ·Î¿î µ¥ÀÌÅÍÇü number¸¦ ¸¸µë */
 
void test(void);
 
void main()
{
   number a;
   /* »õ·Î¿î µ¥ÀÌÅÍÇü number¸¦ »ç¿ëÇØ¼­ ¿­°ÅÇü º¯¼ö a¸¦ ¼±¾ð */
 
   a=one+six;
   printf("One+Six=%d\n",a);
   test();
}
 
void test(void)
{
   number b;
   /* »õ·Î¿î µ¥ÀÌÅÍÇü number¸¦ »ç¿ëÇØ¼­ ¿­°ÅÇü º¯¼ö b¸¦ ¼±¾ð */
 
   b=two+five;
   printf("One+Five=%d\n",b);
}