À̹ø °Á ¿¡¼´Â °ø¿ëü¿Í ¿°ÅÇü »ó¼ö ±×¸®°í ŸÀÔ ¸¸µé±â, ¼±Çà󸮱â Áö½Ã¾î¸¦ ¹è¿öº¸°Ú½À´Ï´Ù.
1. °ø¿ëü °ø¿ëü¶õ ÇѰ³ ÀÌ»óÀÇ º¯¼ö°¡ ±â¾ïÀå¼Ò¸¦ °øÀ¯Çϰí ÀÖ´Â ±¸Á¶¶ó°í »ý°¢ÇÏ½Ã¸é µÊ´Ï´Ù. °ø¿ëü´Â ±¸Á¶Ã¼¿Í ¿ÏÀüÈ÷ ¶È°°½À´Ï´Ù. ´Ü ±× ¾ÈÀÇ ¸ðµç ¸â¹ö º¯¼öµéÀÌ ±â¾ïÀå¼Ò¸¦ °øÀ¯Çϰí ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£ÁÒ. Áï ¸ðµç ¸â¹ö º¯¼öµéÀÇ ÁÖ¼Ò°¡ °°½À´Ï´Ù. ±×·¯¹Ç·Î ¾î¶² ¸â¹ö º¯¼öÀÇ ³»¿ëÀÌ ¹Ù²î¸é ´Ù¸¥ ¸ðµç ¸â¹ö º¯¼öÀÇ ³»¿ëµµ ¹Ù²î°Ô µÊ´Ï´Ù. °ø¿ëüÀÇ ¼±¾ðºÎÅÍ »ç¿ë±îÁöµµ ¸ðµÎ ±¸Á¶Ã¼¿Í °°´Ù°í º¸½Ã¸é µÇ´Âµ¥ ´Ü ±¸Á¶Ã¼´Â struct¶ó´Â Ű¿öµå¸¦ ½èÁö¸¸ °ø¿ëü´Â unionÀ̶ó´Â Ű¿öµå¸¦ ¾²°í ÀÖÁÒ. ±×·¯¹Ç·Î Ưº°È÷ ¼±¾ð, »ç¿ë¹æ¹ý µî¿¡ ´ëÇØ¼´Â ¼³¸í µå¸®Áö ¾Ê°Ú½À´Ï´Ù. 10ȸ¿¡ ³ª¿Ô´ø ±¸Á¶Ã¼ÀÇ ¼³¸í¸¸ Àß ÀÐÀ¸¼Ì°í ±×°ÍÀ» Àß ÀÌÇØÇÏ¼Ì´Ù¸é ±¸Áö ¼³¸íÀÌ ÇÊ¿ä ¾ø´Ù°í º¾´Ï´Ù. ±×·³ ¸î°¡Áö ¿¹¸¦ µé¾î º¸°í °ø¿ëü¿¡ ´ëÇØ¼± ¸¶Ä¡µµ·Ï ÇÏÁÒ. µÎ Á¤¼ö º¯¼ö a¿Í b¸¦ ¸â¹ö º¯¼ö·Î °¡Áö°í ÀÖ´Â Data¶ó´Â À̸§ÀÇ °ø¿ëü´Â ´ÙÀ½°ú °°ÀÌ ¸¸µé¸é µÇ°ÚÁÒ?
union Data { int a; int b; };
±¸Á¶Ã¼¿Í ¶È°°Áö¸¸ ´ÜÁö unionÀ̶ó´Â Ű¿öµå¸¦ ¾´ °Í »ÓÀÔ´Ï´Ù. ±×·³ »ç¿ëÇÒ¶© ¾î¶»°Ô ÇÒ±î¿ä? ±¸Á¶Ã¼¿¡¼± ±¸Á¶Ã¼ º¯¼ö¶ó´Â °ÍÀ» ¼±¾ðÇØ »ç¿ëÇߴµ¥, ÀÌ¿Í ¸¶Âù°¡Áö·Î °ø¿ëü¿¡¼± °ø¿ëü º¯¼ö¶ó´Â °ÍÀ» ¼±¾ðÇØ »ç¿ëÇÏ¸é µÊ´Ï´Ù. ¿¹¸¦ µé¾î d¶ó´Â À̸§À» °¡Áø À§ÀÇ Data¶ó´Â °ø¿ëüÀÇ º¯¼ö´Â
union Data d;
ÀÌ·¸°Ô ¼±¾ðÇϰÚÁÒ? ±×¸®°í ¸â¹ö º¯¼öÀÎ a¸¦ 10À¸·Î ¹Ù²Û´Ù°í ÇÏ¸é ±¸Á¶Ã¼¿Í °°Àº ¹æ¹ýÀ¸·Î
d.a=10;
ÀÌ·¸°Ô ÇØ ÁÖ¸é µÊ´Ï´Ù. ±×·±µ¥ ¿©±â¼ Áß¿äÇÑ °ÍÀÌ Àִµ¥, Áö±Ý ¸â¹ö º¯¼öÀÎ a¿¡ 10À» ³Ö¾ú½À´Ï´Ù. ±×·¸´Ù¸é ¶Ç´Ù¸¥ ¸â¹öº¯¼ö b¿¡´Â ¾î¶² °ªÀÌ µé¾î°¥±î¿ä? b¿¡µµ ¿ª½Ã 10ÀÌ µé¾î°¡°ÚÁÒ? ÀÌ°Ô ±¸Á¶Ã¼¶ó¸é b¶ó´Â ¸â¹öº¯¼ö¿¡´Â ¾Æ¹« º¯È°¡ ¾ø°ÚÁö¸¸ °ø¿ëüÀ̱⠶§¹®¿¡ a¿Í b´Â ±â¾ïÀå¼Ò¸¦ °øÀ¯Çϰí ÀÖÀ¸¹Ç·Î ±×·¸°Ô µÇ´Â °ÍÀÌÁÒ. ±¸Á¶Ã¼Ã³·³ °ø¿ëü¿¡µµ °ø¿ëü ¹è¿°ú °ø¿ëü Æ÷ÀÎÅͰ¡ Àִµ¥ ÀÌ°Ç »ý·«Çصµ »ó°ü ¾øÀ»°Í °°±º¿ä. ¾îÂ÷ÇÇ struct¶ó´Â Ű¿öµå µ¥½Å unionÀ̶ó´Â Ű¿öµå¸¦ ¾´´Ù´Â °Í »©°í´Â ±¸Á¶Ã¼¿Í ¼±¾ð¹× »ç¿ë¹ý µîÀÌ ¶È°°À¸´Ï±î¿ä. ±¸Á¶Ã¼¸¦ Àß °øºÎÇÏ¼Ì´Ù¸é ±×¸® ¾î·ÆÁö ¾ÊÀ¸¼ÌÀ» °É·Î ¾Ë°í ÀÌÁ¤µµ·Î °ø¿ëü ¼³¸íÀº ¸¶Ä¡°Ú½À´Ï´Ù.
2. ¿°ÅÇü »ó¼ö ¿°ÅÇü »ó¼ö¶õ Á¤¼öÇü »ó¼öÀÇ ÀÏÁ¾À¸·Î µ¿ÀÏÇÑ ¿ëµµ·Î ¾²ÀÌ´Â »ó¼öµé¿¡°Ô ±×µéÀ» ´ë½ÅÇÒ¼ö ÀÖ´Â À̸§À» ºÎ¿©ÇÏ¿© ¿°ÅÇØ µÐ °ÍÀÔ´Ï´Ù. ¿°ÅÇü »ó¼ö¸¦ ¸¸µå´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
enum [¿°Å¸í] { »ó¼ö¸í [= »ó¼ö°ª], ... } [º¯¼ö, º¯¼ö, ..];
¿©±â¼ ¿°Å¸í ¿°ÅÇØµÐ »ó¼ö°¡ ¾î¶² »ó¼öµéÀÎÁö ±× »ó¼öµé Àüü¿¡ ´ëÇÑ À̸§ÀÔ´Ï´Ù. ±×¸®°í »ó¼ö¸íÀº »ó¼ö¸¦ ´ë½ÅÇÒ À̸§, »ó¼ö°ªÀº ±× »ó¼ö¸í¿¡´ëÇÑ ½ÇÀç °ª, ¸¶Áö¸·À¸·Î º¯¼ö´Â ÀÏ¹Ý º¯¼ö¸¦ ¼±¾ðÇÑ °ÍÀ¸·Î¼ Á¤¼öÇü(int) º¯¼öÀÔ´Ï´Ù. ¿©±â¼ »ó¼ö°ªÀº »ý·« °¡´ÉÇѵ¥ »ý·«ÇÏ¸é ±× Àü¿¡ ÀÖ´Â »ó¼öÀÇ ´ÙÀ½ °ªÀ¸·Î ÁöÁ¤µÊ´Ï´Ù. ¿¹¸¦ µé¾î Àü¿¡ °ªÀÌ 100ÀÌ¸é ±× ´ÙÀ½ °ªÀÎ 101ÀÌ µÇÁÒ. ±×·±µ¥ ±× Àü¿¡ ÀÖ´Â »ó¼ö°¡ ¾øÀ»¶§ Áï óÀ½À϶§´Â 0ÀÌ µÊ´Ï´Ù. ±×¸®°í ¿°Å¸í°ú º¯¼öµéµµ »ý·«Çصµ µÊ´Ï´Ù. ±×·³ ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº ¿°ÅÇü »ó¼ö°¡ ÀÖ´Ù°í ÇսôÙ.
enum NUMBER { ZERO, FIRST, SECOND, THIRD, FORHT, FIFTH };
ÀÌ·¸°Ô ¿°ÅÇü »ó¼ö¸¦ ¸¸µé°í ³ª¸é ÇÁ·Î±×·¥ ³»¿¡¼ 0´ë½Å ZERO¸¦ 1´ë½Å FIRST¸¦.... ÀÌ·¸°Ô »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¿°ÅÇü »ó¼ö¸¦ ¸¸µé¶§ ¿°Å¸íÀº »ý·« °¡´ÉÇϹǷÎ
enum { ZERO, FIRST, SECOND, THIRD, FORHT, FIFTH };
ÀÌ·¸°Ô¸¸ ÇØµµ µÊ´Ï´Ù. ¶ÇÇÑ À§¿Í °°Àº ¿°ÅÇü »ó¼ö¸¦ ¸¸µé¸é¼ º¯¼ö a, b¸¦ ¼±¾ðÇÏ·Á¸é
enum NUMBER { ZERO, FIRST, SECOND, THIRD, FORHT, FIFTH } a, b;
ÀÌ·¸°Ô ÇÏ¸é µÊ´Ï´Ù. À̶§ ¼±¾ðµÈ a, b´Â Á¤¼öÇü(int) º¯¼öÀÔ´Ï´Ù. ±×·¯¹Ç·Î
enum NUMBER { ZERO, FIRST, SECOND, THIRD, FORHT, FIFTH }; int a, b;
ÀÌ·¸°Ô ÇÏ´Â °Í°ú ¶È°°Àº °ÍÀÌÁÒ. ¸¶Áö¸·À¸·Î ¾î¶² ÇÁ·Î±×·¥¿¡´Â
enum ¿°Å¸í º¯¼ö¸í[, º¯¼ö¸í, ...];
ÀÌ·¸°Ô ¼±¾ðµÈ º¯¼ö°¡ ÀÖ½À´Ï´Ù. À̰ÍÀº ÀÏ¹Ý Á¤¼öÇü(int) º¯¼ö¿Í ¿ÏÀüÈ÷ ¶È°°½À´Ï´Ù. ±×·¯´Ï±î À§¿Í³ª¿Â NUMBER¶ó´Â ¿°ÅÇü »ó¼ö°¡ ¸¸µé¾îÁ® ÀÖÀ»¶§
enum NUMBER a, b, c;
ÀÌ·¸°Ô ÇÑ °ÍÀº
int a, b, c;
À̰Ͱú ¶È°°Àº ÀÇ¹Ì ÀÔ´Ï´Ù.
3. ŸÀÔ ¸¸µé±â C¾ð¾î¿¡´Â ¿©·¯°¡Áö µ¥ÀÌÅÍ Å¸ÀÔ Å°¿öµå µéÀÌ ÀÖ½À´Ï´Ù. int, char, float, doubleµîÀÌ ÀÖÁÒ? ÀÌ·±°Ç ±×³É ¾²±â¿¡ ºÒÆíÇÑ Á¡ÀÌ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ unsigned short intÇüÅÂÀÇ µ¥ÀÌÅ͸¦ ¸¹ÀÌ ½á¾ß ÇÑ´Ù°í ÇսôÙ. ±×·²¶§´Â ³Ê¹« ±æ¾î¼ ¾²±â°¡ Áö°Ü¿ö ÁöÁÒ. ÀÌ°É °£´ÜÈ÷ ¾²´Â ¹æ¹ýÀÌ Àִµ¥ ¹æ¹ýÀº unsigned short int¿Í ¶È°°Àº ÇüÅÂÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» »õ·Ó°Ô ¸¸µé¾î ÁÖ´Â °ÍÀÌÁÒ. ÀÌ·¸°Ô »õ·Î¿î µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µé¶§ ¾²´Â °ÍÀÌ typedefÀÔ´Ï´Ù. ±×·³ »ç¿ë ¹æ¹ýÀ» ¾Ë¾Æº¸ÁÒ. »ç¿ëÀº ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.
typedef ±âÁ¸Å¸ÀÔ »õ·Î¿îŸÀÔ;
¿¹¸¦ µé¾î unsigned short int¿Í ¶È°°Àº ÇüÅÂÀÇ word¶ó´Â µ¥ÀÌÅÍ ÇüŸ¦ ¸¸µé·Á¸é
typedef unsigned short int word;
ÀÌ·¸°Ô ÇØ ÁÖ¸é µÊ´Ï´Ù. ±×·¯¸é ÇÁ·Î±×·¥ ³»¿¡¼
unsigned short int a; À̰Š´ë½Å
word a;
ÀÌ·¸°Ô¸¸ ÇØ Á־ µÊ´Ï´Ù. ±×¸®°í typedef·Î´Â ±¸Á¶Ã¼¸¦ µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î ¸¸µé¾î ÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù. Àú¹ø¿¡ ±¸Á¶Ã¼¸¦ ¼³¸íÇÒ¶§ ±¸Á¶Ã¼´Â µ¥ÀÌÅÍ Å¸ÀÔÀ» »õ·Ó°Ô ¸¸µå´Â °ÍÀ̶ó°í »ý°¢ÇÏ½Ã¸é µÈ´Ù°í Çߴµ¥ ±×°ÍÀÌ ÁøÂ¥·Î »õ·Î¿î µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µç °ÍÀº ¾Æ´Õ´Ï´Ù. ÇÏÁö¸¸ typedef¸¦ ¾²¸é ÁøÂ¥·Î »õ·Î¿î µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µé ¼ö ÀÖ°Ô µÇ´Â °ÍÀÌÁÒ. ¿¹¸¦ µé¾î Student¶ó´Â ±¸Á¶Ã¼°¡ ÀÖ´Ù°í ÇսôÙ. ±×¶§
typedef struct Student StudentType;
ÀÌ·¸°Ô ÇØ ÁÖ¸é Student¶ó´Â ±¸Á¶Ã¼¸¦ StudentType¶ó´Â À̸§ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î ¸¸µé¾î ÁØ °ÍÀÔ´Ï´Ù. ±×·¯¸é ÇÁ·Î±×·¥¿¡¼
struct Student s;
ÀÌ·¸°Ô ÇÒ °ÍÀ» ´ÜÁö
StduentType s;
ÀÌ·¸°Ô¸¸ ÇØ ÁÖ¸é µÊ´Ï´Ù. °ø¿ëü ¿ª½Ã ±¸Á¶Ã¼¿Í ¸¶Âù°¡Áö·Î µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µé¼ö ÀÖ½À´Ï´Ù.
4. ¼±Çà󸮱â Áö½Ã¾î ¼±Çà󸮱⿡ ´ëÇØ¼´Â 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 ¿¡·¯³»¿ë
¿©±â¼ ¾´ ¿¡·¯³»¿ëÀÌ ÄÄÆÄÀÏ ÇÒ¶§ Ç¥½Ã°¡ µÇ¸ç, ÄÄÆÄÀÏÀÌ ÁßÁö µÊ´Ï´Ù.
À̰ÍÀ¸·Î À̹ø °Á´ ¸¶Ä¡µµ·Ï ÇϰڽÀ´Ï´Ù. ´ÙÀ½ °Á ¿¡¼´Â ¿ÜºÎ ÇÁ·Î±×·¥°ú ¿¬°áÇÏ´Â ¹æ¹ý, ±×¸®°í ¶óÀ̺귯¸®¿¡ ´ëÇØ ¾Ë¾Æº¸ÁÒ.
|