#°ú ##Àº Àü󸮱âÀÇ ¿¬»êÀڷμ ÄÄÆÄÀÏ·¯°¡ #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¸¦ Àû¾îµµ Àß µ¿ÀÛÇÑ´Ù. ¹°·Ð ÀÌ·¸°Ô ÇØ¾ß ÇÒ ÀÌÀ¯´Â ¾øÁö¸¸ Àüó¸® °úÁ¤ÀÌ ÄÄÆÄÀÏ Àü¿¡ ¼öÇàµÈ´Ù´Â °ÍÀ» º¸¿©ÁÖ´Â ¸í¹éÇÑ Áõ°Å·Î º¼ ¼ö ÀÖ´Ù. ¾î·µç ¾à°£ Àç¹ÌÀÖ±â´Â ÇÏ´Ù.