# ¼±Çà󸮱â Áö½Ã¾î
¼±Çà󸮱⿡ ´ëÇØ¼´Â 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 ¹®