# ¼±Çà󸮱â Áö½Ã¾î

¼±Çà󸮱⿡ ´ëÇØ¼­´Â 1ȸ¶§ ¹è¿îÀûÀÌ ÀÖ°í

¼±Çà󸮱â Áö½Ã¾îÁß #include¿¡ ´ëÇØ¼­ 2ȸ¶§ ÀÌ¹Ì ¹è¿ì¼Ì½À´Ï´Ù.

ÇÏÁö¸¸ Áö½Ã¾î¿¡´Â ÀÌ°Í ¿Ü¿¡µµ ¸î°¡Áö°¡ ´õ ÀÖ½À´Ï´Ù.

±×·³ ±×°Íµé¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸ÁÒ.

(1) #define

#define¶ó´Â Áö½Ã¾î´Â ¸ÅÅ©·Î ±â´ÉÀ» ¼öÇàÇÏ´Â Áö½Ã¾î ÀÔ´Ï´Ù.

±âº»ÀûÀÎ »ç¿ë¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.

#define ¸ÅÅ©·Î¸í [°ª]

ÀÌ·¸°Ô ÇØ µÎ¸é ÇÁ·Î±×·¥ ³»¿¡¼­ ¸ÅÅ©·Î¸í°ú °°Àº À̸§À» °¡Áø ´Ü¾îµéÀ»

¸ðµÎ °ªÀ¸·Î ¹Ù²ã ÁÜ´Ï´Ù. ±×¸®°í ¿©±â¼­ °ªÀº ¾ø¾îµµ µÇÁÒ.

¿¹¸¦ µé¾î

#define DATA 10

ÀÌ·¸°Ô ÇØ ÁÖ¸é ÇÁ·Î±×·¥ ³»¿¡ DATA¶ó´Â ´Ü¾î¸¦ ¸ðµÎ 10À¸·Î ¹Ù²ã ÁÖ°Ô µÊ´Ï´Ù.

Áï ÇÁ·Î±×·¥¿¡¼­

if(a==DATA)
{
   .
   .
}

ÀÌ·¸°Ô ¾´ °ÍÀº ½ÇÀç·Î´Â

if(a==10)
{
   .
   .
}

ÀÌ·¸°Ô µÇ¾î ¹ö¸®´Â °Í ÀÔ´Ï´Ù.

#define¶ó´Â Áö½Ã¾î·Î´Â ÇÔ¼ö¿Í °°Àº ¸ÅÅ©·Îµµ ¸¸µé¼ö ÀÖ½À´Ï´Ù.

¸¸µå´Â ¹æ¹ýÀº ´ÙÀ½°ú °°ÁÒ.

#define ¸ÅÅ©·ÎÇÔ¼ö¸í([Àμö, Àμö, ...]) [¹®Àå]

À̶§ Àμö´Â ÀÏ¹Ý ÇÔ¼öÀÇ Àμö¿Í ¶È°°Àº ¿ëµµ·Î ¾²ÀÔ´Ï´Ù.

Áï °ªÀ» Àü´Þ¿¡ ÁÖ´Â ¿ªÈ°À» ÇÏÁÒ. ¹°·Ð ¾ø¾îµµ »ó°ü ¾ø°í¿ä.

±×¸®°í ¹®ÀåÀº ¸ÅÅ©·ÎÀÇ ³»¿ëÀ¸·Î ÀμöµéÀ» ¾µ¼ö ÀÖÁÒ.

±×·³ ¿¹¸¦ µé¾î º¸ÁÒ.

#define FUNC(a,b) printf(a,b);

ÀÌ·¸°Ô ¸ÅÅ©·Î¸¦ ¸¸µé¾ú´Ù°í ÇսôÙ.

±×¸®°í ÇÁ·Î±×·¥ ³»¿¡¼­ ÀÌ ¸ÅÅ©·Î¸¦

FUNC("%d",10);

ÀÌ·¸°Ô »ç¿ëÇß´Ù¸é ÀÌ°Ç ¼±Çà󸮱Ⱑ Áö½Ã¾î¸¦ ¹ø¿ªÇÑ ÈÄ¿¡´Â

printf("%d",10);

ÀÌ·¸°Ô µÇ¾î ¹ö¸®´Â °Í ÀÔ´Ï´Ù.

ÀÌÁ¤µµ¸é ÀÌÇØ°¡ µÇ¼Ì°ÚÁÒ?

(2) ##¿Í \

¸ÅÅ©·Î¸¦ ¸¸µé¶§¸¸ »ç¿ëÇÒ¼ö ÀÖ´Â ¸î°¡Áö Áö½Ã¾î°¡ Àִµ¥,

¹Ù·Î ##¿Í \ÀÔ´Ï´Ù.

##´Â ÇÔ¼ö¿Í °°Àº ¸ÅÅ©·Î¿¡¼­¸¸ »ç¿ëÇÏ´Â °ÍÀ¸·Î

µÎ°¡Áö Àμö¸¦ ¿¬°á½ÃÄÑ ¹ö¸®´Â ±â´ÉÀ» ÇÕ´Ï´Ù.

¿¹¸¦ µé¾î

#define MACRO(a,b) a##b

ÀÌ·¸°Ô ¸ÅÅ©·Î¸¦ ¸¸µé¾ú´Ù°í ÇսôÙ.

ÇÁ·Î±×·¥¿¡¼­ ÀÌ ¸ÅÅ©·Î¸¦

a=MACRO(First,Last);

ÀÌ·¸°Ô »ç¿ëÇß´Ù¸é

½ÇÀç·Î´Â µÎ Àμö First¿Í Last°¡ ¿¬°áµÇ¾î

a=FirstLast;

ÀÌ·¸°Ô µÇ´Â °Í ÀÔ´Ï´Ù.

\´Â ¸ÅÅ©·ÎÀÇ ³»¿ëÀÌ ³Ê¹« ±æ¶§ ¿©·¯ÁÙ¿¡ ¾²±â À§ÇØ ÇÊ¿äÇÑ °ÍÀÔ´Ï´Ù.

ÁÙ ¸Ç ³¡¿¡ \¸¦ ºÙ¿© ÁÖ¸é ±× ¾Æ·§ÁÙ¿¡ °è¼Ó ¿¬°áÇÏ¿© ¾µ¼ö ÀÖ°Ô µÇ´Â °ÍÀÌÁÒ.

¿¹¸¦ µé¾î

#define MACRO(a,b,c) a=b+c; printf("%d\n",a); a=b-c; printf("%d\n",a)

ÀÌ·± ¸ÅÅ©·Î°¡ ÀÖ´Ù°í ÇսôÙ.

ÀÌ°Ç \¸¦ ½á¼­ ´ÙÀ½°ú °°ÀÌ ¾²¸é º¸±âµµ ½±°í ¸¸µé±âµµ ½±ÁÒ.

#define MACRO(a,b,c) a=b+c; \
                     printf("%d\n",a); \
                     a=b-c; \
                     printf("%d\n",a)

(3) #undef

#define·Î ¸¸µç ¸ÅÅ©·Î¸¦ ¾ø¿¤¶§´Â ¾î¶»°Ô ÇÒ±î¿ä?

±×¶§ #undef¶ó´Â Áö½Ã¾î¸¦ »ç¿ëÇÕ´Ï´Ù.

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

#undef ¸ÅÅ©·Î¸í

¿©±â¼­ ¸ÅÅ©·Î¸íÀº ¾ø¿¡·Á°í ÇÏ´Â ¸ÅÅ©·ÎÀÇ À̸§À¸·Î

ÀÌ¹Ì ¸¸µé¾î Á® ÀÖ´Â °ÍÀ̾î¾ß ÇÕ´Ï´Ù.

ÀÌ·¸°Ô ÇØ ÁÖ¸é ÇØ´ç ¸ÅÅ©·Î´Â ¾ø¾îÁ®¼­

´õÀÌ»ó »ç¿ëÇÒ¼ö ¾ø°Ô µÊ´Ï´Ù.
(4) #if-#elif-#else-#endif

#if-#elif-#else-#endif´Â

¼±ÅÃÀû ¸ÅÅ©·Î ¼±¾ðÀ̳ª ¼±ÅÃÀû ÄÄÆÄÀÏ ±â´ÉÀ» ÇÏ´Â ¸ÅÅ©·Î ÀÔ´Ï´Ù.

C¾ð¾î ÇÁ·Î±×·¥ È帧Á¦¾îÁß if¹®°ú ºñ½ÁÇÏÁÒ.

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

#if Á¶°ÇA
   /* AºÎºÐ */
   .
   .
#elif Á¶°ÇB
   /* BºÎºÐ */
   .
   .
 .
 .
#else
   /* elseºÎºÐ */
   .
   .
#endif

¿©±â¼­ Á¶°ÇA°¡ ¸¸Á·Çϸé AºÎºÐ¸¸À» Á¶°ÇB°¡ ¸¸Á·Çϸé BºÎºÐ¸¸À»...

±×¸®°í ¾î¶² Á¶°Ç¿¡µµ ¸¸Á·ÇÏÁö ¾ÊÀ¸¸é elseºÎºÐ¸¸À»

ÄÄÆÄÀÏ ÇØ ÁÖ°Ô µÊ´Ï´Ù.

±×¸®°í #elifºÎºÐ°ú #elseºÎºÐÀº ¾ø¾îµµ µÊ´Ï´Ù.

Á¶°ÇÀº ÀÏ¹Ý C¾ð¾îÀÇ °ü°èÇü ¿¬»êÀÚ¿Í ³í¸® ¿¬»êÀÚ ±×¸®°í defined¶ó´Â °ÍÀ»

»ç¿ëÇÑ Á¶°Ç ÀÌÁö¸¸ º¯¼ö°°Àº°Ç »ç¿ëµÉ¼ö ¾ø°í

¸ÅÅ©·Î¸¦ »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î

DATA1 == DATA2

ÀÌ·± Á¶°ÇÀº

DATA1À̶õ ¸ÅÅ©·Î¿Í DATA2¶ó´Â ¸ÅÅ©·ÎÀÇ °ªÀº °°´Ù

¶ó´Â Á¶°Ç ÀÔ´Ï´Ù.

±×¸®°í defined´Â ƯÁ¤ ¸ÅÅ©·Î°¡ ¸¸µé¾îÁ® ÀÖÀ¸¸é ÂüÀ»

±×·¸Áö ¾ÊÀ¸¸é °ÅÁþÀ» µ¹·Á ÁÖ´Â ±â´ÉÀ» Çϴµ¥,

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

defined(¸ÅÅ©·Î¸í)

À̶§ ¸ÅÅ©·Î¸í¿¡ ÇØ´çÇÏ´Â ¸ÅÅ©·Î°¡ ¸¸µé¾îÁ® ÀÖÀ¸¸é ÂüÀ»

±×·¸Áö ¾ÊÀ¸¸é °ÅÁþÀ» µ¹·ÁÁÖÁÒ.

±×·³ ÇѰ¡Áö ¿¹¸¦ µé¾î º¸ÁÒ.

#define MACRO 10

#if !defined(MACRO)
printf("MACRO not found\n");
#elif MACRO == 0
printf("MACRO = 0\n");
#elif MACRO == 5
printf("MACRO = 5\n");
#elif MACRO == 10
printf("MACRO = 10\n");
#else
printf("MACRO = Another value\n");
#endif

´ÙÀ½°ú °°Àº ³»¿ëÀÌ ÀÖÀ»¶§

½ÇÀç·Î ÄÄÆÄÀÏ µÇ´Â °ÍÀº ¾î¶² ¹®Àå Àϱî¿ä?

´ç¿¬È÷

printf("MACRO = 10\n");

ÀÌ ¹®Àå À̰ÚÁÒ.

Àß ºÐ¼®ÇØ º¸½Ã¸é ¿Ö ±×·±Áö´Â ¾Æ½Ã°Ô µÇ½Ç °Ì´Ï´Ù.

(5) #ifdef-#else-#endif

#ifdef-#else-#endif´Â #if-#elif-#else-#endif¿Í ºñ½ÁÇÏÁö¸¸

´Ù¸¥ Á¶°ÇµéÀ» ÁÙ¼ö ¾ø°í ´ÜÁö ¾î¶² ¸ÅÅ©·Î°¡ ¸¸µé¾îÁ® ÀÖÀ»°Ü¿ì

ƯÁ¤ ºÎºÐÀ» ÄÄÆÄÀÏ ½ÃÄÑ ÁÖ´Â ±â´ÉÀ» ÇÕ´Ï´Ù.

»ç¿ëÀº ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.

#ifdef ¸ÅÅ©·Î¸í
   /* AºÎºÐ */
   .
   .
#else
   /* BºÎºÐ */
   .
   .
#endif

¿©±â¼­ ¸ÅÅ©·Î¸í¿¡ ÇØ´çÇÏ´Â ¸ÅÅ©·Î°¡ ¸¸µé¾îÁ® ÀÖÀ»°æ¿ì

AºÎºÐÀ» ±×·¸Áö ¾ÊÀ¸¸é BºÎºÐÀ» ÄÄÆÄÀÏ ÇÕ´Ï´Ù.

±×¸®°í #elseºÎºÐÀº ¾ø¾îµµ µÊ´Ï´Ù.

(6) #ifndef-#else-#endif

#ifndef-#else-#endif´Â À§¿¡ #ifdef-#else-#endif¿Í °ÅÀÇ

¶È°°½À´Ï´Ù. ÇÏÁö¸¸ À§¿¡°Í¿¡¼± ¾î¶² ¸ÅÅ©·Î°¡ ¸¸µé¾îÁ® ÀÖÀ»¶§

ƯÁ¤ ºÎºÐÀ» ÄÄÆÄÀÏ ½ÃŰ´Â °ÍÀÌÁö¸¸, ÀÌ°Ç Æ¯Á¤ ¸ÅÅ©·Î°¡

¸¸Áñ¾î Á® ÀÖÁö ¾ÊÀ»¶§ ƯÁ¤ ºÎºÐÀ» ÄÄÆÄÀÏ ½ÃÄÑ ÁÖ´Â °Í ÀÔ´Ï´Ù.

»ç¿ëÀº

#ifndef ¸ÅÅ©·Î¸í
   /* AºÎºÐ */
   .
   .
#else
   /* BºÎºÐ */
   .
   .
#endif

ÀÌ·¸°Ô ÇÕ´Ï´Ù. ¿©±â¼­ ¸ÅÅ©·Î¸í¿¡ ÇØ´çÇÏ´Â ¸ÅÅ©·Î°¡ ¸¸µé¾î Á® ÀÖÁö

¾ÊÀ¸¸é AºÎºÐÀ» ±×·¸Áö ¾Ê°í ¸¸µé¾îÁ® ÀÖÀ¸¸é BºÎºÐÀ» ÄÄÆÄÀÏ ÇØ ÁÖ°í

#elseºÎºÐÀ» ¾ø¾îµµ µÊ´Ï´Ù.

(7) #error

#error¶ó´Â Áö½Ã¾î´Â ¿¡·¯¸¦ ¹ß»ý½ÃÄÑ ÄÄÆÄÀÏÀ» ÁßÁö ½ÃŰ´Â Áö½Ã¾î ÀÔ´Ï´Ù.

Áö±ÝÀº º°·Î ¾µ ÀÏÀÌ ¾øÁö¸¸ ¾ðÁ¨°£ ²À ¾µ ÀÏÀÌ ÀÖÀ» °Ì´Ï´Ù.

»ç¿ëÀº ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.

#error ¿¡·¯³»¿ë

¿©±â¼­ ¾´ ¿¡·¯³»¿ëÀÌ ÄÄÆÄÀÏ ÇÒ¶§ Ç¥½Ã°¡ µÇ¸ç, ÄÄÆÄÀÏÀÌ ÁßÁö µÊ´Ï´Ù.

Previous:°ø¿ëü, ¿­°ÅÇü »ó¼ö, typedef ¹®