18-2.Àü󸮱â

18-2-°¡.#°ú ##

#°ú ##Àº Àü󸮱âÀÇ ¿¬»êÀڷμ­ ÄÄÆÄÀÏ·¯°¡ #define Àüó¸® °úÁ¤¿¡¼­¸¸ »ç¿ëÇϴ Ư¼öÇÑ ¿¬»êÀÚÀÌ´Ù. C ¾ð¾î ÀÚüÀÇ ¿¬»êÀÚ´Â ¾Æ´Ï¹Ç·Î ¿ì¼± ¼øÀ§³ª °áÇÕ ±ÔÄ¢ µîÀº Àû¿ëµÇÁö ¾Ê´Â´Ù. µÑ ´Ù »ç¿ë ºóµµ°¡ ³ôÁö´Â ¾ÊÁö¸¸ Àß ¾Ë¾Æ µÎ¸é ¸ÅÅ©·ÎÀÇ È°¿ëµµ¸¦ ³ô¿© ¹Ýº¹µÇ´Â Äڵ带 °£´ÜÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ¾î ÀÛ¾÷ È¿À² Çâ»óÀ» ²ÒÇÒ ¼ö ÀÖ´Ù.

# ¿¬»êÀÚ(stringizing operator)´Â #define¹®ÀÇ Àμö ¾Õ¿¡ »ç¿ëµÇ¸ç ÇÇ¿¬»êÀÚ¸¦ ¹®ÀÚ¿­·Î ¹Ù²Ù´Â ¿ªÇÒÀ» ÇÑ´Ù. ÇÇ¿¬»êÀÚ°¡ ½ÇÀμö·Î ġȯµÈ ÈÄ ¾çÂÊ¿¡ µû¿ÈÇ¥¸¦ ºÙ¿© ġȯµÈ °á°ú ±×´ë·Î ¹®ÀÚ¿­ »ó¼ö°¡ µÈ´Ù. ´ÙÀ½ ¿¹Á¦°¡ ÀÌ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â °¡Àå ÀüÇüÀûÀÎ ¿¹Á¦ÀÌ´Ù.

 

¿¹ Á¦ : SharpOp

#include <Turboc.h>

 

#define result(exp) printf(#exp"=%d\n",exp);

 

void main()

{

     result(5*3);

     result(2*(3+1));

}

 

result ¸ÅÅ©·Î´Â Àμö·Î Àü´ÞµÈ ¼ö½ÄÀ» printf ÇÔ¼ö·Î Ãâ·ÂÇ쵂 ¼ö½Ä ÀÚü¿Í ¼ö½ÄÀÇ Æò°¡ °á°ú¸¦ °°ÀÌ Ãâ·ÂÇÑ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

5*3=15

2*(3+1)=8

 

result(5*3) È£Ãâ¹®Àº Àü󸮱⿡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ Ä¡È¯µÈ´Ù.

¸ÅÅ©·Î·Î Àü´ÞµÈ 5*3 ¼ö½ÄÀÌ # ¿¬»êÀÚ¿¡ ÀÇÇØ ¹®ÀÚ¿­·Î ġȯµÇ¸ç ÀÎÁ¢ÇÑ ¹®ÀÚ¿­Àº ÇÕÃÄÁö¹Ç·Î 5*3À̶ó´Â ¼ö½Ä ÀÚü°¡ printfÀÇ ¼­½Ä ¹®ÀÚ¿­ÀÇ ÀϺΰ¡ µÈ´Ù. ¸¸¾à ´ÙÀ½°ú °°ÀÌ ¸ÅÅ©·ÎÀÇ Àμö ÀÚü¸¦ ¹®ÀÚ¿­ ³»¿¡¼­ Á÷Á¢ ¾²°Ô µÇ¸é ÀÌ ½ÇÀμö´Â ġȯµÇÁö ¾Ê°í exp¶ó°í¸¸ Ãâ·ÂµÉ »Ó È£ÃâºÎÀÇ ½ÇÁ¦ ¼ö½ÄÀÌ Ãâ·ÂµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

 

#define result(exp) printf("exp=%d\n",exp);

 

¿äÄÁµ¥ #¿¬»êÀÚ´Â ¹®ÀÚ¿­ »ó¼ö ³»ºÎÀÇ Çü½Ä Àμö¸¦ ½ÇÀμö·Î ġȯ½Ãų ¶§ »ç¿ëÇÏ´Â ¿¬»êÀÚ¶ó°í ÇÒ ¼ö ÀÖ´Ù. #¿¬»êÀÚ´Â Á¤È®ÇÑ ¹®ÀÚ¿­ º¯È¯À» À§ÇØ ¸î °¡Áö ±ÔÄ¢À» Àû¿ëÇϴµ¥ »ó½Ä ¼öÁØ¿¡¼­ ½±°Ô ÀÌÇØµÇ´Â ±ÔÄ¢µéÀÌ´Ù. #°ú Çü½Ä Àμö »çÀÌÀÇ °ø¹é, Çü½Ä Àμö ´ÙÀ½ÀÇ °ø¹éÀº ¹«½ÃµÇ¹Ç·Î #exp, # exp´Â µ¿ÀÏÇÏ´Ù. ½ÇÀμö³»ÀÇ °ø¹éÀº Çϳª¸¸ ÀÎÁ¤µÇ¸ç µÑ ÀÌ»óÀÇ °ø¹éÀº Çϳª¸¸ ³²±â°í ¸ðµÎ »èÁ¦µÈ´Ù. ½ÇÀμö³»¿¡ ÁÖ¼®ÀÌ ÀÖÀ¸¸é ÀÌ ÁÖ¼®Àº ÇϳªÀÇ °ø¹éÀ¸·Î ´ëüµÈ´Ù.

 

È£ÃâºÎ

ġȯ °á°ú

result(5*3)

5*3=15

result(5 * 3)

5 * 3=15

result(5* 3)

5* 3=15

result(5     *     3)

5 * 3=15

result(5*/*°öÇϱâ*/3);

5* 3=15

 

½ÇÀμö¿¡ °ãµû¿ÈÇ¥³ª ¿ª½½·¹½¬ µî È®Àå¿­·Î ó¸®ÇØ¾ß ÇÒ ¹®ÀÚ°¡ ÀÖ´Ù¸é ÀÌ ¹®ÀÚ ¾Õ¿¡ È®Àå¿­ ¼±µÎ ¹®ÀÚÀÎ \°¡ ÀÚµ¿À¸·Î »ðÀԵȴÙ. #define println(msg) printf(#msg"\n") À̶ó´Â ¸ÅÅ©·Î°¡ ÀÖÀ» ¶§ ÀÌ ¸ÅÅ©·ÎÀÇ Ä¡È¯ °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

È£ÃâºÎ

ġȯ °á°ú

Ãâ·Â °á°ú

println(¸Þ½ÃÁö);

printf("¸Þ½ÃÁö\n")

¸Þ½ÃÁö

println("¸Þ½ÃÁö");

printf("\"¸Þ½ÃÁö\"\n")

"¸Þ½ÃÁö"

println("¸Þ"½Ã"Áö");

printf("\"¸Þ\"½Ã\"Áö\"\n")

"¸Þ"½Ã"Áö"

 

#¿¬»êÀÚ¸¦ Àß È°¿ëÇϸé 2Áø¼ö ÇüÅÂÀÇ »ó¼ö¸¦ Ç¥±âÇÒ ¼ö ÀÖ´Ù. C++Àº 8Áø, 10Áø, 16Áø »ó¼ö Ç¥±â¹ýÀº Áö¿øÇÏÁö¸¸ 2Áø »ó¼ö Ç¥±â¹ýÀº Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î ¾Ï»êÀ» ÅëÇØ 16Áø¼ö·Î ¸¸µé¾î¾ß ÇÑ´Ù. ²À ÇÊ¿äÇÒ °æ¿ì Á» »ö´Ù¸¥ ¹æ¹ýÀ» µ¿¿øÇÒ ¼ö Àִµ¥ Ç¥ÁØ ÇÔ¼öÁß¿¡ ¹®ÀÚ¿­À» ¼öÄ¡·Î º¯È¯ÇÏ´Â strtol ÇÔ¼ö´Â ±â¼ö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ 2Áø¼ö ÇüÅÂÀÇ ¹®ÀÚ¿­·ÎºÎÅÍ ¿øÇÏ´Â °ªÀ» ¸¸µé¾î ³»´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î ÀÌÁø¼ö 00110100 »ó¼ö¸¦ Á¤ÀÇÇÏ°í ½Í´Ù¸é strtol("00110100",NULL,2)¶ó°í È£ÃâÇÏ¸é µÈ´Ù.

±×·±µ¥ ÀÌ ÇÔ¼ö¸¦ ¸Å¹ø È£ÃâÇÏ´Â °ÍÀº ¹«Ã´ ¹ø°Å·Î¿ì¹Ç·Î Á» ´õ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ÅÅ©·Î ÇÔ¼ö¸¦ Á¤ÀÇÇÏ°í ½Í´Ù°í ÇÏÀÚ. ¹®Á¦´Â ÀÌ ÇÔ¼ö°¡ ¿ä±¸ÇÏ´Â 2Áø Ç¥±â°¡ ¹Ýµå½Ã ¹®ÀÚ¿­À̾î¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ÀÌ·² ¶§ #¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é ½ÇÀμö¸¦ ¹®ÀÚ¿­·Î ¹Ù²ã ÁֹǷΠ2Áø°ªÀ» ¹Ù·Î Àû¾îµµ µÈ´Ù. ´ÙÀ½Àº 2Áø »ó¼ö¸¦ Ç¥±âÇÏ´Â BIN ¸ÅÅ©·ÎÀÌ´Ù.

 

¿¹ Á¦ : BinaryConst

#include <Turboc.h>

 

#define BIN(a) strtol(#a,NULL,2)

 

void main()

{

     printf("%x\n",BIN(00010010001101001111000001011100));

}

 

BIN ¸ÅÅ©·ÎÀÇ ½ÇÀμö·Î 2Áø¼ö Ç¥±â¸¦ Àû±â¸¸ Çϸé ÀÌ Ç¥±â¸¦ ¹®ÀÚ¿­·Î ¹Ù²Û ÈÄ strtol ÇÔ¼ö¿¡ ÀÇÇØ ¼öÄ¡°ªÀ¸·Î º¯È¯µÇ¾î ¸®Å쵃 °ÍÀÌ´Ù. Ãâ·Â °á°ú´Â 16Áø¼ö 1234f05cÀ̸ç BIN ¸ÅÅ©·ÎÀÇ 2Áø¼ö¿Í °°Àº °ªÀÌ´Ù. ÀÌ ¸ÅÅ©·Î´Â ¹®ÀÚ¿­À» °ÅÃÄ ¼öÄ¡¸¦ ¸¸µé¾î ³»¹Ç·Î È¿À²Àº ÁÁÁö ¸øÇÏÁö¸¸ 2Áø¼ö ¾Ï»êÀÌ Àß ¾ÈµÇ´Â »ç¶÷¿¡°Ô´Â ¾ÆÁÖ À¯¿ëÇÏ´Ù.

## ¿¬»êÀÚ(merge operator) ¿ª½Ã #define ¹® ³»¿¡¼­¸¸ »ç¿ëµÇ¸ç Çü½Ä Àμö »çÀÌ¿¡ À§Ä¡ÇÑ´Ù. Çü½Ä Àμö¸¦ ºÐ¸®ÇÏ¿© °¢°¢ ġȯµÇµµ·Ï Çϸç ġȯ ÈÄ¿¡´Â ÁÖº¯ÀÇ °ø¹é°ú ÇÔ²² »ç¶óÁ® µÎ ÀμöÀÇ Ä¡È¯ °á°ú°¡ ÇϳªÀÇ ÅäÅ«À¸·Î ¿¬°áµÉ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

¿¹ Á¦ : SharpSharpOp

#include <Turboc.h>

 

#define var(a,b) (a##b)

 

void main()

{

     int var(Total, Score);

     TotalScore=256;

     printf("ÃÑÁ¡ = %d\n",TotalScore);

}

 

var ¸ÅÅ©·Î´Â µÎ °³ÀÇ Çü½Ä Àμö¸¦ ¹Þ¾Æ µé¿© ÀÌ µÎ ¸íĪÀ» ¿¬°áÇØ¼­ ÇϳªÀÇ ¸íĪÀ¸·Î ¸¸µå´Âµ¥ Çü½Ä Àμö a¿Í b »çÀÌ¿¡ ## ¿¬»êÀÚ°¡ »ç¿ëµÇ¾ú´Ù. ¸¸¾à ## ¿¬»êÀÚ¾øÀÌ var(a,b) (ab)·Î Á¤ÀÇÇÑ´Ù¸é Àü󸮱Ⱑ ab¸¦ a¿Í b Àμö°¡ ¾Æ´Ñ º°µµÀÇ ¸íĪÀ¸·Î ÀνÄÇϹǷΠ½ÇÀμö·Î ġȯµÇÁö ¸øÇÏ°í ±×´ë·Î ab·Î ³²¾Æ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ µÎ Çü½Ä Àμö°¡ ##¿¡ ÀÇÇØ ±¸ºÐµÊÀ¸·Î½á ¾çÂÊ ¸ðµÎ ½ÇÀμö·Î ġȯµÇ¸ç ġȯ ÈÄ¿¡ ##Àº »ç¶óÁø´Ù. var(Total, Score)°¡ ġȯµÇ´Â °úÁ¤Àº ´ÙÀ½°ú °°´Ù.

##Àº ÁÖº¯ÀÇ °ø¹é±îÁö °°ÀÌ Á¦°ÅÇϹǷΠ¸ÅÅ©·Î Á¤Àǹ®ÀÇ ## ÁÂ¿ì °ø¹éÀº ¹«½ÃµÈ´Ù. (a##b)·Î ¾²³ª (a ## b)·Î ¾²³ª °á°ú´Â µ¿ÀÏÇÏ´Ù. ##Àº ġȯÀü¿¡ µÎ ÅäÅ«À» ºÐ¸®ÇÏ¿© °¢ ÅäÅ«ÀÌ Ä¡È¯µÉ ¼ö ÀÖµµ·Ï ±¸ºÐÇÏ´Â ¿ªÇÒÀ» Çϸç ġȯ ÈÄ¿¡´Â ÁÖº¯ÀÇ °ø¹é°ú ÇÔ²² ÀÚÆøÇÏ¿© µÎ ÅäÅ«À» Çϳª·Î ¿¬°áÇÑ´Ù. ÀÌ ¿¬»êÀÚ´Â ÁÖ·Î ÀϰýÀûÀΠŸÀÔ Á¤ÀÇ¿¡ »ç¿ëµÈ´Ù.

 

¿¹ Á¦ : DefineType

#include <Turboc.h>

 

#define defptype(type) typedef type *p##type

 

void main()

{

     defptype(int);

     defptype(double);

     defptype(char);

 

     pint pi;

     int i=3;

     pi=&i;

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

}

 

defptype ¸ÅÅ©·Î´Â int, double µîÀÇ Å¸ÀÔÀ» Àμö·Î Àü´Þ¹ÞÀ¸¸ç ¿ø·¡ ŸÀÔ¾Õ¿¡ p¸¦ ºÙ¿© Æ÷ÀÎÅÍ Å¸ÀÔÀ» »õ·Î Á¤ÀÇÇÑ´Ù. ¿¹¸¦ µé¾î defptype(int)´Â Á¤¼öÇü Æ÷ÀÎÅÍ pint¸¦ Á¤ÀÇÇϰí defptype(double)Àº ½Ç¼öÇü Æ÷ÀÎÅÍ pdoubleÀ» Á¤ÀÇÇÑ´Ù. Çü½Ä Àμö typeÀÌ ¸ÅÅ©·Î È£Ãâ¹®À¸·Î Àü´ÞµÈ ½ÇÀμö(int, double µî)À¸·Î ¸ÕÀú ġȯµÈ ÈÄ ¾Õ¿¡ pÀÚ¸¦ ºÙÀ̱â À§ÇØ ##ÀÌ Ä¡È¯À» µ½°í ÀÖ´Ù. »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼­µµ ¹°·Ð »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÌ·± ¸ñÀûÀ¸·Î »ç¿ëµÇ´Â ##¿¬»êÀÚ´Â À©µµ¿ìÁîÀÇ Ç¥ÁØ Çì´õ ÆÄÀϰú ¸Þ½ÃÁö Å©·¡Ä¿, MFC ¼Ò½º ÄÚµå, COM Çì´õ ÆÄÀÏ¿¡¼­ ÈçÈ÷ ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÌ ¸î °¡Áö ¿¹ÀÌ´Ù.

 

#define OLESTR(str)     L##str

#define MAKE_ENUM(Method, Interface)    Interface##_##Method

#define HANDLE_MSG(hwnd, message, fn)    \

    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))

#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))

static const AFX_DATA CRuntimeClass class##class_name; \

 

¸ÅÅ©·Î Á¤Àǹ®µéÀÌ Çϳª°°ÀÌ ¹«Ã´ º¹ÀâÇØ º¸À̴µ¥ ÀÌ·± ¸ÅÅ©·ÎÀÇ µµ¿òÀ¸·Î ½ÇÁ¦ ÄÚµå´Â ÈξÀ ´õ °£´ÜÇØÁú ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ ÄÚµåµéÀº °ü·Ã ºÎºÐ¿¡¼­ ´Ù½Ã »ìÆìº¼ ±âȸ°¡ ÀÖÀ» °ÍÀÌ¸ç ¶ÇÇÑ ºÐ¼®ÇغÁ¾ß ÇÑ´Ù. ´çÀå ÀÌ ¹®ÀåµéÀÇ Àǹ̸¦ ºÐ¼®ÇÒ ¼ö´Â ¾ø°ÚÁö¸¸ Àå·¡ ÀÌ ¸ÅÅ©·Î¸¦ ºÐ¼®ÇØ¾ß ÇÒ ¶§¸¦ ´ëºñÇØ¼­ ¿©±â¼­´Â ## ¿¬»êÀÚÀÇ Á¤ÀÇ¿Í µ¿ÀÛ¿¡ ´ëÇØ¼­¸¸ Àß Á¤¸®ÇØ µÎµµ·Ï ÇÏÀÚ.

Çà °è¼Ó ¹®ÀÚ·Î ¾Ë·ÁÁø \µµ ÀÏÁ¾ÀÇ Àüó¸® ¿¬»êÀÚÀ̸ç ÀڽŰú µÚÂÊÀÇ °³Çà ¹®ÀÚ¸¦ ¾ø´Â °ÍÀ¸·Î Ãë±ÞÇÏ¿© µÎ ÁÙÀ» Çϳª·Î ¿¬°áÇÏ´Â ¿ëµµ·Î »ç¿ëÇÑ´Ù. ÀÌ ¹®ÀÚ°¡ Çà ³¡¿¡ ¿Ã ¶§ ÀÚ½ÅÀÇ µÚÂÊ¿¡ ÀÖ´Â °ø¹éµé°ú °³ÇàÄÚµå±îÁö ¸ù¶¥ Á¦°ÅÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±×·¡¼­ ´ÙÀ½ ¹®ÀåÀº µÎ ÇàÀ¸·Î ºÐ¸®µÇ¾î ÀÖÁö¸¸ Àüó¸® ÈÄ¿¡ ÇÑ ¹®ÀåÀ¸·Î ÇÕÃÄÁø´Ù. ÃʱâÈ­ÇÒ ¹®ÀÚ¿­ÀÌ ÇÑ Çà¿¡ ´Ù ¾µ ¼ö ¾øÀ»¸¸Å­ ±æ¾îÁú ¶§ ÁÙ ³¡¿¡ \¸¦ Àû°í °³ÇàÇÑ ÈÄ °è¼Ó ¾²¸é µÈ´Ù.

 

char Message[]="ÀÌ ¹®ÀÚ¿­Àº \

¾Æ·¡ÀÇ ¹®ÀÚ¿­°ú ÇÕÃÄÁý´Ï´Ù.";

 

´Ü, \ ¿¬»êÀÚ´Â ±â°èÀûÀ¸·Î µÎ ÇàÀ» ¿¬°áÇÒ »ÓÀÌ¸ç ´ÙÀ½ ÇàÀÇ ¼±µÎ¿¡ ÀÖ´Â °ø¹é±îÁöµµ À­ÁÙ¿¡ ºÙÀ̱⠶§¹®¿¡ µÎ ¹øÂ° ÁÙÀ» µé¿©¾²±âÇØ¼­´Â ¾ÈµÇ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. ±×·¡¼­ ÀÌ ¹æ¹ýº¸´Ù´Â ¹®ÀÚ¿­ »ó¼ö¸¦ ¿¬¼ÓÀ¸·Î Àû´Â ¹æ¹ýÀÌ ´õ Æí¸®ÇÏ´Ù. Àç¹ÌÀÖ´Â °ÍÀº ÀÌ ¿¬»êÀÚ°¡ ÄÄÆÄÀϵDZâ Àü¿¡ 󸮵DZ⠶§¹®¿¡ ¸íĪÀÇ Áß°£¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. printf¸¦ pri\±îÁö¸¸ ¾²°í ´ÙÀ½Çà¿¡ ³ª¸ÓÁö ntf¸¦ Àû¾îµµ Àß µ¿ÀÛÇÑ´Ù. ¹°·Ð ÀÌ·¸°Ô ÇØ¾ß ÇÒ ÀÌÀ¯´Â ¾øÁö¸¸ Àüó¸® °úÁ¤ÀÌ ÄÄÆÄÀÏ Àü¿¡ ¼öÇàµÈ´Ù´Â °ÍÀ» º¸¿©ÁÖ´Â ¸í¹éÇÑ Áõ°Å·Î º¼ ¼ö ÀÖ´Ù. ¾î·µç ¾à°£ Àç¹ÌÀÖ±â´Â ÇÏ´Ù.