ÀÐÀ»°Å¸® > µðº§·ÎÆÛ Ç÷¯½º
C99 ÀÌÇØ¸¦ À§ÇÑ ¹è°æ Áö½Ä°ú »õ ±â¼ú ¼Ò°³ - 3
Àü¿õ
Á¦ÇÑµÈ Æ÷ÀÎÅÍ [Lang][Lib][Open]
Çϵå¿þ¾îÀûÀ¸·Î º´·Ä 󸮸¦ Áö¿øÇϴ ȯ°æ(¿¹¸¦ µé¸é º¤ÅÍ ÇÁ·Î¼¼¼)¿¡¼ Á¦°øÇÏ´Â º´·ÄÈ ±â´ÉÀ» Á¦´ë·Î Ȱ¿ëÇϱâ À§Çؼ´Â ±âº»ÀûÀ¸·Î ƯÁ¤ ¿¬»êÀÌ ¹Ýº¹Çؼ Àû¿ëµÇ´Â µÎ ¹è¿ ´ë»óü°¡ ¼·Î ¹«°üÇØ¾ß ÇÑ´Ù. Áï ±×¿Í °°Àº ȯ°æ¿¡¼ Á¦°øÇÏ´Â ¼º´É ÁÁÀº ÃÖÀûÈ ±â´ÉÀ» ½ÊºÐ Ȱ¿ëÇϱâ À§Çؼ´Â ƯÁ¤ ¿¬»êÀ» ¼öÇàÇÏ´Â ÇÔ¼ö¿¡ ¸Å°³º¯¼ö¸¦ ÅëÇØ ÁÖ¾îÁö´Â µÎ ¹è¿ÀÇ ¸ðµç ¿ä¼ÒµéÀÌ ¼·Î ¿¡Àϸ®¾î¡µÇ¾î¼´Â ¾È µÈ´Ù´Â ÀǹÌÀÌ´Ù. C ¾ð¾î¸¦ óÀ½ Ç¥ÁØÈÇÏ´ø ½Ã±â¿¡ ÄÄÆÄÀÏ·¯¿¡°Ô µÎ ´ë»óü°¡ ¼·Î ¿¡Àϸ®¾î¡µÇÁö ¾Ê¾ÒÀ½À» È®½Å½Ã۱â À§ÇÑ ¹æ¹ýÀ¸·Î noalias¶ó´Â Çü ÇÑÁ¤¾î(type qualifier)¸¦ µµÀÔÇÏ·Á Çß´Ù. ÇÏÁö¸¸ ÀÌ Çü ÇÑÁ¤¾î´Â »ó´çÈ÷ ¾ö°ÝÇÏ°í º¹ÀâÇÑ Àǹ̸¦ °¡Áö°í ÀÖ¾î Á¦´ë·Î ±â¼úÇϱ⵵ ½±Áö ¾Ê¾Ò°í, À̸¦ µµÀÔÇÒ °æ¿ì ¾ð¾î¿¡ ½É°¢ÇÑ ¿ÀÁ¡À» ¸¸µé °¡´É¼ºµµ Àֱ⿡ ½ÉÇÑ ¹Ý´ë¿¡ ºÎµúÇô °á±¹ Ç¥ÁØ¿¡ ÀÔ¼ºÇÏÁö ¸øÇß´Ù(http://www.lysator.liu.se/c/dmr-on-noalias.html Âü°í). ´Ù¸¸ C90ÀÇ ³¡ÀÚ¶ô¿¡ ¼·Î °ãÃÄÁø µÎ ¹è¿ ´ë»óü¸¦ ÇÔ¼ö¿¡ Àü´ÞÇÏ´Â °ÍÀº º´·Ä ȯ°æ¿¡¼ÀÇ ÃÖÀûȸ¦ °í·ÁÇØ º°·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù´Â ÀÏÁ¾ÀÇ Ãæ°í¸¸ÀÌ ÀÚ¸®Àâ°í ÀÖÀ» »ÓÀ̾ú´Ù(<±×¸² 2>).
±×·¸°Ô °·ÂÇÑ ¹Ý´ë ¼Ó¿¡ »ç¶óÁø noaliasÀÇ Àǵµ´Â ÈξÀ À¯¿¬ÇÑ Àǹ̸¦ °®´Â Á¦ÇÑµÈ Æ÷ÀÎÅÍ(restricted pointer)¶ó´Â À̸§À¸·Î C99¿¡¼ ºÎȰÇÏ°Ô µÈ´Ù. ¹°·Ð ÀÌ¹Ì noalias¸¦ ÅëÇØ ½ÃÇàÂø¿À¸¦ Çѹø °Þ¾ú±â¿¡ noalias¿Í´Â ¸¹ÀÌ ´Ù¸¥ ¹æ¹ýÀ» ÅëÇØ Á¢±ÙÇÏ°Ô µÈ´Ù. Á¦ÇÑµÈ Æ÷ÀÎÅͶõ Æ÷ÀÎÅÍ¿¡¸¸ Àû¿ëµÇ¾î À¯È¿ÇÑ Àǹ̸¦ °®´Â Çü ÇÑÁ¤¾î restrict¸¦ °®´Â Æ÷ÀÎÅ͸¦ ¸»ÇÑ´Ù. ÀÌ·¸°Ô ¼±¾ðµÈ Æ÷ÀÎÅÍÀÇ Á¤È®ÇÑ Àǹ̴ ǥÁØ¿¡¼Á¶Â÷ »ó´çÈ÷ ¼öÇÐÀûÀ¸·Î ±â¼úµÇ¾î Àֱ⿡ À̰÷¿¡¼ ¸ðµÎ ´Ù·ç±â¿¡´Â ¹«¸®°¡ ÀÖ´Ù. ´Ù¸¸ ´ë·«ÀûÀÎ Àǹ̸¦ ´ÙÀ½°ú °°ÀÌ ¼³¸íÇÒ ¼ö ÀÖ´Ù.
void func(double *restrict d, cont double *restrict s, size_t n);
ÀÌ ¼±¾ðÀº ÇÔ¼ö func() ¾È¿¡¼ d°¡ °¡¸®Å³ ¼ö ÀÖ´Â ´ë»óü¿Í s°¡ °¡¸®Å³ ¼ö ÀÖ´Â ´ë»óü°¡ ¼·Î ¹«°üÇÔÀ» ÀǹÌÇÑ´Ù. ÀÌ·¯ÇÑ º¸ÀåÀ» ÅëÇØ º´·Ä ¿¬»êÀ» ÅëÇÑ ÃÖÀûȰ¡ Áö¿øµÇ´Â ȯ°æÀÇ ÄÄÆÄÀÏ·¯´Â d¿Í s°¡ °¢°¢ °¡¸®Å°´Â ´ë»óü¿¡ Àû¿ëµÇ´Â ¿¬»êÀ» º´·ÄÈÇÏ¿© ÃÖÀûÈÇÒ ¼ö ÀÖ´Ù. ¹°·Ð Á¦ÇÑµÈ Æ÷ÀÎÅ͸¦ ¸Å°³º¯¼ö·Î °®´Â ÇÔ¼ö¿¡ °ãÃÄÁø ¹è¿ ´ë»óü¸¦ Àü´ÞÇÏ´Â ÇàÀ§´Â ÀÌÁ¦ ºÒ¹ýÀÌ µÇ¸ç ¾Õ¼ »ìÆìº» ¿¡Àϸ®¾î¡°ú °ü·ÃµÈ ¿¹Ã³·³ ¿¹»óÄ¡ ¸øÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Â ¿øÀÎÀÌ µÉ ¼öµµ ÀÖ´Ù. Âü°í·Î restrict´Â ·¹Áö½ºÅÍ Ã³·³ ÄÄÆÄÀÏ·¯¿¡°Ô ÃÖÀûȸ¦ À§ÇØ ÇÁ·Î±×·¡¸Ó°¡ Á¦°øÇØ ÁÖ´Â ÀÏÁ¾ÀÇ ÈùÆ®ÀÏ »ÓÀÌ´Ù. µû¶ó¼ restrict¸¦ ÅëÇØ ÀÌ·ê ¼ö ÀÖ´Â ÃÖÀûÈ¿Í ¹«°üÇÑ È¯°æ(ȤÀº ±×·¯ÇÑ ÃÖÀûȰ¡ Á¸ÀçÇÏÁö¸¸ ÄÄÆÄÀÏ·¯ Á¦ÀÛÀÚ°¡ ¹«´É·ÂÇϰųª °ÔÀ¸¸¥ °æ¿ì)¿¡¼´Â ÄÄÆÄÀÏ·¯°¡ °£´ÜÈ÷ restrict¸¦ ¹«½ÃÇØ ¹ö¸± ¼öµµ ÀÖ´Ù.
Á¦ÇÑµÈ Æ÷ÀÎÅͰ¡ ÇÔ¼ö ¸Å°³º¯¼ö¿¡¼ »ç¿ëµÇ¸é °á±¹ ÇØ´ç Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ´ë»óü°¡ ¼·Î °ãÄ¡Áö ¾Ê¾ÒÀ½À» ÀǹÌÇϱ⠶§¹®¿¡ ¼·Î °ãÃÄÁø ´ë»óü¸¦ ÀÎÀÚ·Î Á־ ¾È µÇ´Â ±âÁ¸ÀÇ Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ±â¼úÇÏ´Â ¹æ¹ýµµ ÈξÀ ¼ö¿ùÇØÁ³´Ù. ¿¹¸¦ µé¾î Ç¥ÁØÀº ¸Þ¸ð¸®ÀÇ ºí·° ´ÜÀ§ º¹»ç¿¡ ´ëÇØ Ưº°È÷ È¿À²ÀûÀÎ ¿¬»êÀ» Á¦°øÇϴ ȯ°æÀ» °í·ÁÇØ ¸Þ¸ð¸® º¹»ç ÇÔ¼ö¸¦ memcpy()¿Í memmove()·Î ³ª´² Á¦°øÇϰí ÀÖ´Ù. °ãÃÄÁø ¸Þ¸ð¸® °ø°£¿¡¼µµ ¿Ã¹Ù¸¥ º¹»ç°¡ ÀÌ·ç¾îÁöµµ·Ï Çϱâ À§ÇØ µÎ ¸Þ¸ð¸® °ø°£ÀÌ °ãÃÄ ÀÖÀ½À» È®ÀÎÇÏ´Â °úÁ¤ ÀÚü°¡ ¹«½Ã ¸øÇÒ ¿À¹öÇìµå°¡ µÇ±â ¶§¹®¿¡ ÇÁ·Î±×·¡¸Ó´Â ¸Þ¸ð¸®°¡ °ãÃÄ ÀÖÁö ¾ÊÀ½À» È®½ÅÇÏ´Â °æ¿ì memcpy()¸¦ »ç¿ëÇØ ÀáÀçÀûÀ¸·Î ÁÁÀº ¼º´ÉÀ» ±â´ëÇÒ ¼ö ÀÖ´Ù. °ãÃÄ ÀÖÀ» °¡´É¼ºÀÌ ÀÖ´Â °æ¿ì ¾à°£ÀÇ ¿À¹öÇìµå¸¦ °¨¼öÇÏ°í ¾ÈÀüÇÏ°Ô memmove()¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. µû¶ó¼ C90¿¡¼´Â memcpy()ÀÇ ¿øÇüÀ» ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.
memcpy(void *, const void *, size_t);
¸»·Î½á °ãÃÄÁø ¸Þ¸ð¸® ¿µ¿ª »çÀÌÀÇ º¹»ç¸¦ ±ÝÁöÇßÁö¸¸, Á¦ÇÑµÈ Æ÷ÀÎÅÍÀÇ µµÀÔÀ¸·Î ÀÌÁ¦ C99¿¡¼´Â memcpy()¿Í memmove()°¡ ¼·Î ´Ù¸¥ ÇüÅÂÀÇ ¿øÇüÀ» °®°í ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
memcpy(void *restrict, const void *restrict, size_t);
memmove(void *, const void *, size_t);
À¯¿¬ÇÑ ¹è¿ ¸â¹ö [Lang][Open]
±¸Á¶Ã¼¸¦ ¼±¾ðÇ쵂 ±¸Á¶Ã¼ÀÇ ¸â¹ö Áß Çϳª°¡ ¹è¿À̰í, ¶Ç ÀÌ ¹è¿ÀÇ Å©±â¸¦ µ¿Àû ÇÒ´çÀ» ÅëÇØ ´Ã¸®°Å³ª ÁÙÀÌ°í ½Í´Ù¸é º¸Åë ´ÙÀ½ Áß ÇÑ °¡Áö ¹æ¹ýÀ» ÅëÇØ ÀÚ·á ±¸Á¶¸¦ ±¸ÇöÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù(À̸¦ struct hackÀ̶ó°í ºÎ¸¥´Ù).
struct foo {
int number;
double bar[100];
} *flexible;
flexible = malloc(
sizeof(struct foo)
- sizeof(double) * 100
+ sizeof(double) * n);
flexible->number = n;
flexible->bar[n-1] = 0; // wrong
------------------------------------
struct foo {
int number;
double bar[1];
} *flexible;
flexible = malloc(
sizeof(struct foo) +
sizeof(double) * (n-1));
flexible->number = n;
flexible->bar[n-1] = 0; // wrong
ÀÌ¿Í °°Àº ÇÁ·Î±×·¥ ±¸Á¶´Â »ó´çÈ÷ ±ä ±â°£ µ¿¾È ´Ù¾çÇÑ C ÇÁ·Î±×·¥¿¡¼ ºó¹øÇÏ°Ô »ç¿ëµÇ¾î¿Â ±¸Á¶ÀÓ¿¡µµ ºÒ±¸Çϰí, Ç¥ÁØ C ¾ð¾î¸¦ ¾ö°ÝÇÑ È¯°æ¿¡µµ ¹«¸® ¾øÀÌ Àû¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇϱâ À§ÇØ ¸ðµÎ À߸øµÈ ±¸Á¶·Î ±ÔÁ¤Çß´Ù. À§¿øÈ¸´Â ÁÂÃø ±¸Á¶°¡ À߸øµÈ ÀÌÀ¯¸¦ ÀϺΠȯ°æ¿¡¼ ±¸Á¶Ã¼¿¡ Á¢±ÙÇÒ ¶§ ¼±¾ðµÈ ±¸Á¶Ã¼ÇüÀÇ ¸Þ¸ð¸® Àüü(bar[n]ÀÌ ¾Æ´Ñ bar[100] ÀüºÎ)¸¦ ¿ä±¸ÇÒ ¼ö Àֱ⠶§¹®À̸ç, ¿ìÃø ±¸Á¶°¡ À߸øµÈ ÀÌÀ¯´Â ¸â¹ö bar¸¦ ÅëÇØ ÀϾ´Â Æ÷ÀÎÅÍ ¿¬»êÀ» ¼±¾ðµÈ ±¸Á¶Ã¼Çü(bar[n]ÀÌ ¾Æ´Ñ bar[1])¿¡ ¸ÂÃç Á¦ÇÑÇÒ ¼ö Àֱ⠶§¹®À̶ó°í ¼³¸íÇϰí ÀÖ´Ù.
°á±¹ C99 ÀÌÀü¿¡ ÀÌ¿Í °°Àº ÇüÅÂÀÇ ÀÚ·á ±¸Á¶¸¦ ±¸¼ºÇÏ´Â À¯ÀÏÇÑ Àû¹ýÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ ¹ø°Å·Î¿î ¸Þ¸ð¸® ÇÒ´ç °úÁ¤À» °ÅÄ¡´Â °Í»ÓÀ̾ú´Ù. ¸Þ¸ð¸® ÇÒ´ç °úÁ¤ÀÌ ¹ø°Å·Ó´Ù´Â °ÍÀº ±×·¸°Ô ÇÒ´ç¹ÞÀº ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÒ ¶§µµ µ¿ÀÏÇÏ°Ô ¹ø°Å·Î¿òÀ» ÀǹÌÇÑ´Ù.
struct foo {
int number;
double *bar;
} *flexible;
flexible = malloc(sizeof(struct foo));
flexible->bar = malloc(sizeof(double) * n);
flexible->bar[n-1] = 0;
ÇÏÁö¸¸ Ç¥ÁØÈ À§¿øÈ¸ ¿ª½Ã À¯¿¬ÇÑ ¹è¿ ¸â¹ö¸¦ °®´Â ±¸Á¶Ã¼¸¦ óÀ½ º¸ÀÎ °Íó·³ °£´ÜÇÑ ¸Þ¸ð¸® ÇÒ´çÀ¸·Î ±¸¼ºµÉ ¼ö ÀÖµµ·Ï ÇÒ Çʿ䰡 ÀÖÀ½À» µ¿°¨Ç߱⿡ C99¿¡¼ ¼µÑ·¯ ´ÙÀ½°ú °°Àº Àû¹ýÇÑ ÇüŸ¦ µµÀÔÇÏ°Ô µÈ´Ù.
struct foo {
int number;
double bar[]; // flexible array member
} *flexible;
flexible = malloc(sizeof(struct foo) + sizeof(double)*n);
flexible->bar[n-1] = 0;
ºñ·Ï À¯¿¬ÇÑ ¹è¿ ¸â¹ö´Â ±¸Á¶Ã¼ÀÇ ¸¶Áö¸· ¸â¹ö·Î¼¸¸ Á¸ÀçÇÒ ¼ö ÀÖ´Ù´Â µîÀÇ ´Ù¼Ò ¾ö°ÝÇÑ Á¦¾à°ú À¯¿¬ÇÑ ¹è¿ ¸â¹ö¸¦ °®´Â ±¸Á¶Ã¼Çü¿¡ Àû¿ëµÇ´Â sizeof ¿¬»êÀÚÀÇ °á°ú µîÀ» µû·Î Á¤ÀÇÇϱâ À§ÇØ ¾ð¾î¸¦ ÀÌÇØÇϱⰡ ´Ù¼Ò ¾î·Á¿öÁ³Áö¸¸, ¾Õ¼ º¸ÀÎ °£´ÜÇÑ ¿¹¸¦ ÅëÇØ È®ÀÎÇÒ ¼ö ÀÖµíÀÌ »õ·Î µµÀÔµÈ ±â¼úÀº ±× Àǵµ°¡ ÇÁ·Î±×·¥ »ó¿¡¼ ºÐ¸íÈ÷ µå·¯³ª°í »ç¿ëÇϱ⵵ ÃæºÐÈ÷ Æí¸®ÇÔÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
¾Ï½ÃÀûÀÎ int Á¦°Å [Lang]
C ¾ð¾î´Â µ¥ÀÌÅÍÇüÀ» °®Áö ¾Ê´Â ¾ð¾î(typeless language)ÀÎ BCPL°ú B¿¡ »Ñ¸®¸¦ µÎ°í ÀÖ´Ù. µû¶ó¼ ¾Ë°Ô ¸ð¸£°Ô ±× ¾ð¾îµéÀÇ Æ¯¼ºÀ» ¹°·Á¹Þ°Ô µÆ´Ù. ±× Áß °¡Àå ´ëÇ¥ÀûÀÎ °ÍÀ¸·Î ²ÅÀ» ¼ö ÀÖ´Â °ÍÀÌ ¹Ù·Î ¾Ï½ÃÀûÀÎ int(implicit int)ÀÌ´Ù. ÀÌ´Â ¸» ±×´ë·Î ¹®¹ý»ó Çü ÁöÁ¤ÀÚ(type specifier)°¡ ³ª¿Í¾ß ÇÏ´Â ÀϺΠ¹®¸Æ¿¡ ¾Æ¹« °Íµµ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ±âº»ÀûÀ¸·Î int ÇüÀ¸·Î °¡Á¤µÊÀ» ÀǹÌÇÑ´Ù. ¿ì¼± ¾Ï½ÃÀû intÀÇ ¸î °¡Áö ¿ë·Ê¸¦ »ìÆìº¸µµ·Ï ÇÏÀÚ.
foo(void) /* int func(void)¿Í µ¿ÀÏÇÑ ÀÇ¹Ì */
{
return 1;
}
bar(a, b) /* °íÀüÀûÀÎ ÇÔ¼ö Á¤ÀÇ ¹æ½Ä, int bar(a, b)¿Í µ¿ÀÏÇÑ ÀÇ¹Ì */
/* ÀÌ À§Ä¡¿¡ int a, b;°¡ ÀÖ´Â °Í°ú µ¿ÀÏÇÑ ÀÇ¹Ì */
{
return a + b;
}
void foobar(const i); /* void foobar(const int i);¿Í µ¿ÀÏÇÑ ÀÇ¹Ì */
C ¾ð¾î´Â ºÐ¸í ±× ¼±Á¶ ¾ð¾î¿Í´Â ´Þ¸® µ¥ÀÌÅÍÇüÀ» Áö¿øÇϱ⿡ ¸¶Ä¡ µ¥ÀÌÅÍÇüÀÌ ¾ø´Â ¾ð¾îÀÎ °Íó·³ Çü ÁöÁ¤ÀÚ¸¦ »ý·«ÇØ int ÇüÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº »ç¶óÁ®¾ß ¸¶¶¥Çß´Ù. ÇÏÁö¸¸ óÀ½ C Ç¥ÁØÈ°¡ ÀÌ·ç¾îÁú ´ç½Ã Á¸ÀçÇÏ´ø ÀûÁö ¾ÊÀº ¼öÀÇ ÇÁ·Î±×·¥µéÀÌ ÀÌ ±â¼ú¿¡ ÀÇÁ¸Çϰí ÀÖ¾ú±â¿¡ ÇÏÀ§ ȣȯ¼º(backward compatibility)À» ½ÅÁßÇÏ°Ô °í·ÁÇØ Ç¥ÁØ¿¡¼ Á¦°ÅÇÏÁö ¸øÇß´Ù.
¹Ý´ë·Î C99¿¡¼´Â ³Ê¹«³ª °ú°¨ÇÏ°Ô ÀÌ ±â¼úÀÌ Á¦°ÅµÆ´Ù. ¾ð¾î Ç¥ÁØ¿¡ °¡ÇØÁö´Â ±Þ°ÝÇÑ º¯È¸¦ ¸·±â À§ÇØ Ç¥ÁØÀº ±¸½Ä ±â¼ú(obsolete feature)À̶ó´Â °³³äÀ» »ç¿ëÇÑ´Ù. Áï ÇÏÀ§ ȣȯ¼ºÀ» À§ÇØ ÇØ´ç ±â¼úÀÇ ±ÝÁö¸¦ ÀÏ´ÜÀº À¯º¸ÇÏÁö¸¸ ±× ±â¼úÀÌ °áÄÚ ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù°í ÆÇ´ÜµÇ´Â °æ¿ì, À̸¦ Ç¥ÁØ¿¡ ¸í½ÃÀûÀ¸·Î ±¸½Ä ±â¼ú·Î ±â·ÏÇØ ÇÁ·Î±×·¡¸ÓµéÀÌ ÇÁ·Î±×·¥À» ¼öÁ¤Çϰųª »õ ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§ ±× ±â¼úÀÇ »ç¿ëÀ» ²¨¸®µµ·Ï ¸¸µå´Â °ÍÀÌ´Ù(´ëÇ¥ÀûÀÎ ¿¹·Î, ÇÔ¼ö ¼±¾ð½Ã¿¡ int func(); ó·³ ¸Å°³º¯¼ö ¸®½ºÆ®¿¡ ¾Æ¹« °Íµµ Àû¾îÁÖÁö ¾Ê´Â °íÀüÀûÀÎ ¼±¾ð ¹æ½ÄÀº C90 ½ÃÀýºÎÅÍ Áö±Ý±îÁö ±¸½Ä ±â¼ú·Î ÁöÁ¤µÇ¾î ÀÖ´Ù).
ÀÌ·¸°Ô ±¸½ÄÀ¸·Î ÁöÁ¤µÈ ±â¼úÀÌ ¿À·£ ½Ã°£À» °ÅÃÄ Áß¿äÇÑ Äڵ忡¼ »ç¿ëµÇÁö ¾ÊÀ¸¸é ±×¶§ ºñ·Î¼Ò Ç¥ÁØ¿¡¼ ¾ÈÀüÇÏ°Ô Á¦°ÅµÈ´Ù. ÇÏÁö¸¸ À̹ø ¾Ï½ÃÀû int¸¦ Á¦°ÅÇÏ´Â °úÁ¤Àº ÀÌ·¯ÇÑ ±¸½Ä ±â¼ú·ÎÀÇ ÁöÁ¤ ¾øÀÌ ¹Ù·Î ÀÌ·ç¾îÁ³´Ù´Â Á¡¿¡¼ ´Ù¼Ò ÆÄ°ÝÀûÀ̶ó°í º¼ ¼ö ÀÖ´Ù. C ¾ð¾îÀÇ ¸¹Àº ºÎºÐÀº ¼·Î ¿¬°üµÇ¾î Àֱ⿡ ÀÌ ¾Ï½ÃÀûÀÎ intÀÇ Á¦°Å´Â °ð ¾ð¾îÀÇ ´Ù¸¥ ºÎºÐ¿¡ ¶Ç ´Ù¸¥ º¯È¸¦ °¡Á®¿À°Ô µÈ´Ù. ÀÌ´Â ´ÙÀ½ ȸ¿¡¼ return¹®°ú °ü·ÃµÈ º¯È¿¡¼ ÀÚ¼¼È÷ »ìÆìº¸°Ô µÉ °ÍÀÌ´Ù.
¸¶Ä¡¸ç
Á¦ÇÑµÈ Áö¸éÀ¸·Î Ä£ÀýÇÑ ¼³¸íÀ» Àü´ÞÇÏÁö ¸øÇÑ ¾Æ½¬¿òÀÌ ³²Áö¸¸, ½ÃÀÛÀθ¸Å ÀûÀº ¼öÀÇ C99 ±â¼úÀ» ¼Ò°³ÇÏ¸é¼ ÀÚ¼¼ÇÑ À̾߱⸦ ´ãÀ¸·Á ³ë·ÂÇß´Ù. ´ÙÀ½ºÎÅÍ´Â ´õ ¸¹Àº ±â¼úÀ» ´Ù·ç¾î¾ß Çϱ⿡ µ¶ÀÚµéÀÌ À̹ø ù ¿ø°í¸¦ ÅëÇØ È帧¿¡ Àͼ÷ÇØÁ³´Ù°í °¡Á¤Çϰí Á» ´õ ª°í ¸íÈ®ÇÑ ¼³¸íÀ» Àü´ÞÇÒ ¼ö ÀÖµµ·Ï ³ë·ÂÇϰڴÙ. ´ÙÀ½ È£¿¡µµ C99ÀÇ »õ ±â¼ú¿¡ ´ëÇÑ ¼Ò°³°¡ À̾îÁö°í, Ãß°¡·Î ¼Ò°³µÇ´Â ±â¼úÀ» ½ÇÁ¦ ¾î¶² ÄÄÆÄÀÏ·¯¸¦ ÅëÇØ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁöµµ °£´ÜÈ÷ ¾Ë¾Æº¸°Ú´Ù. À̹ø ¿ø°í¿¡ ´ëÇÑ ¾î¶°ÇÑ ÁöÀûÀ̳ª Áú¹®, ±âŸ Àǰߵµ ȯ¿µÀÌ´Ù. ÇÊÀÚÀÇ ¸ÞÀÏÀ̳ª ȨÆäÀÌÁö °Ô½ÃÆÇÀ» ÅëÇØ ¾Ë·ÁÁÖ¸é ÀÚ¼¼ÇÑ ´äº¯À» µå¸± °ÍÀ» ¾à¼ÓÇÑ´Ù. Âü°í·Î ÀÌ ¿¬Àç´Â µÎ Â÷·Ê¿¡ °ÉÃÄ KLDP ¼¼¹Ì³ª¸¦ ÅëÇØ ¹ßÇ¥Çß´ø ³»¿ëÀ» º¸° Á¤¸®ÇÑ °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº http://doc.kldp.org/ wiki.php/KLDPConf/20031011°ú http://doc.kldp.org/wiki.php/ KLDPConf/20040118¿¡¼ ¸¸³¯ ¼ö ÀÖ´Ù.
Á¤¸® | ±è¼¼¹Ì | semsem@korea.cnet.com
[ C ¾ð¾î Ç¥ÁØÈÀÇ ¿øÄ¢ ]
C Ç¥ÁØÀÇ °¡Àå Áß¿äÇÑ ¿ªÇÒ Áß Çϳª´Â »õ ±â¼úÀ» °í¾ÈÇØ Ãß°¡ÇÏ´Â °Íº¸´Ù ±âÁ¸ÀÇ ½Ç·Ê(existing practice)¸¦ ´Ùµë¾î Ç¥ÁØÈÇÏ´Â °ÍÀÌ´Ù. ±×·¸´Ù°í ½ÃÁß¿¡ Á¸ÀçÇÏ´Â ¸ðµç ÄÄÆÄÀÏ·¯ÀÇ È®ÀåÀ̳ª ¿©·¯ ÇÁ·Î±×·¡¸Óµé¿¡ ÀÇÇØ Á¦¾ÈµÇ´Â ±â¼úÀ» ¹«Åδë°í µµÀÔÇÒ ¼ö´Â ¾ø´Â ³ë¸©À̱⿡, À§¿øÈ¸´Â ±×·¯ÇÑ ±â¼úµéÀ» C ¾ð¾î Ç¥ÁØ¿¡ ´ã±â À§ÇØ °í¹ÎÇÒ Çʿ䰡 ÀÖ´Â ¿øÄ¢ ¸î °¡Áö¸¦ Á¦½ÃÇϰí ÀÖ´Ù. ¿©±â¼´Â ±× Áß C99¿¡ »õ·Î µµÀÔµÈ ±â¼úÀ» ¹Ù¶óº¼ ¶§ ¿°µÎ¿¡ µÑ ¸¸ÇÑ ¸î °¡Áö¸¸À» Ãß·Á¼ ¼Ò°³ÇÑ´Ù.
¡ß ±âÁ¸ÀÇ ÄÚµå´Â Áß¿äÇÏ´Ù. ÇÏÁö¸¸ ±âÁ¸ÀÇ ÄÄÆÄÀÏ·¯´Â Áß¿äÇÏÁö ¾Ê´Ù.
ÀÌ´Â À§¿øÈ¸°¡ »õ·Î¿î ±â¼úÀÇ µµÀÔ ¿©ºÎ¸¦ °áÁ¤ÇÒ ¶§, ÀÌ¹Ì »ç¿ëµÇ°í ÀÖ´Â ÄÄÆÄÀÏ·¯º¸´Ù´Â ³Î¸® ¾²ÀÌ´Â °¡Ä¡ ÀÖ´Â Äڵ带 ´õ °í·ÁÇÑ´Ù´Â »ç½ÇÀ» ÀǹÌÇÑ´Ù. Áï µµÀÔÇÏ·Á´Â »õ ±â¼úÀÌ ÀÌ¹Ì »ç¿ëµÇ°í ÀÖ´Â ÄÄÆÄÀÏ·¯ÀÇ È®Àå°ú Ãæµ¹ÇÏ´Â °æ¿ì´Â ÄÄÆÄÀÏ·¯ÀÇ ¼öÁ¤À» ±â´ëÇÏ¸ç °ú°¨È÷ µµÀÔÇÏÁö¸¸ ÀÌ¹Ì ³Î¸® ¾²À̰í ÀÖ´Â ÄÚµå¿Í Ãæµ¹ÇÏ´Â °æ¿ì¿¡´Â »õ ±â¼ú µµÀÔÀ» Àç°íÇÔÀ» ¶æÇÑ´Ù. Âü°í·Î ¿©±â¼´Â Ç¥ÁØ¿¡ Àͼ÷ÇÏÁö ¾ÊÀº µ¶ÀÚµéÀ» À§ÇØ ÄÄÆÄÀÏ·¯¶ó´Â ¿ë¾î¸¦ »ç¿ëÇßÁö¸¸, ±×º¸´Ù´Â ÀÓÇø®¸àÅ×À̼Ç(implementation)ÀÌ ´õ Á¤È®ÇÑ °³³äÀ» Ç¥ÇöÇÏ´Â ¿ë¾îÀÌ´Ù.
¡ß Á¶¿ëÇÑ º¯È¸¦ ÇÇÇÑ´Ù.
»õ ±â¼úÀÌ µµÀԵǴ ſ¿¡ ±âÁ¸ÀÇ »ç¼ÒÇÑ Äڵ尡 ¸í½ÃÀûÀÎ ¿À·ù¸¦ ÀÏÀ¸Å²´Ù¸é ¿ÀÈ÷·Á ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ´ë°³ ÄÄÆÄÀÏ·¯°¡ ÇØ´ç ¿À·ùÀÇ À§Ä¡¿Í ¿øÀαîÁöµµ ÀûÀýÈ÷ ÁöÀûÇØ ÁÙ ¼ö Àֱ⿡ ÇÁ·Î±×·¡¸Ó°¡ Á¶±Ý¸¸ ¼ö°í¸¦ µéÀ̸é À̸¦ °¡º±°Ô ¼öÁ¤ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿ÀÈ÷·Á °¡Àå À§ÇèÇÑ °ÍÀº »õ ±â¼úÀÌ ±âÁ¸ ÄÚµåÀÇ Àǹ̸¦ Á¶¿ëÈ÷ ¹Ù²Ù¾î¹ö¸®´Â °æ¿ìÀÌ´Ù.
¡ß ±¹Á¦ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ» Áö¿øÇÑ´Ù.
ÇÁ·Î±×·¡¹Ö ¾ð¾î»Ó ¾Æ´Ï¶ó ÄÄÇ»ÅÍ ºÐ¾ßÀÇ °¡Àå µÎµå·¯Áö´Â Ư¡Àº Áö±ØÈ÷ ¹Ì±¹ ȤÀº ¿µ¾î Áß½ÉÀûÀ̶ó´Â °ÍÀÌ´Ù. ºÐ¸í ÄÄÇ»ÅÍ¿Í À̸¦ ´Ù·ç±â À§ÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î°¡ ¹Ì±¹ ¹× ¿µ¾î ¹®È±Ç»Ó ¾Æ´Ï¶ó ´Ù¾çÇÑ ±¹°¡¿¡¼ »ç¿ëµÇ°í Àֱ⿡ C ¾ð¾î´Â ±¹Á¦ÀûÀÎ ÇÁ·Î±×·¡¹Ö ȯ°æ°ú À̸¦ ÅëÇØ È®º¸µÇ´Â ±¹Á¦ÀûÀÎ ½ÃÀåÀ» Àû±ØÀûÀ¸·Î Áö¿øÇϱâ À§ÇØ ³ë·ÂÇϰí ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¿¹·Î AMD1¸¦ ÅëÇØ ´õ¿í Àß Áö¿øµÇ´Â ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¿Í È®Àå ¹®ÀÚ, C99¿¡¼ µµÀÔµÈ À¯´Ï ÄÚµå(Á¤È®È÷´Â ISO 10646) µîÀ» µé ¼ö ÀÖ´Ù.
¡ß C90°úÀÇ È£È¯¼ºÀ» À¯ÁöÇÑ´Ù.
ÇÁ·Î±×·¥À̳ª ÆÄÀÏ Çü½ÄÀÌ ÇÏÀ§ ¹öÀü°úÀÇ È£È¯¼ºÀ» À¯ÁöÇÏ´Â °ÍÀÌ Áß¿äÇϵíÀÌ ÇÁ·Î±×·¡¹Ö ¾ð¾î ¿ª½Ã ¸¶Âù°¡Áö´Ù. µû¶ó¼ C90 Ç¥ÁØÀ» µû¶ó ¿Ã¹Ù¸£°Ô ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº C99¿¡¼µµ °ÅÀÇ º¯È ¾øÀÌ Ã³À½ ÀǵµµÈ ÇൿÀ» º¸ÀÏ ¼ö ÀÖµµ·Ï ȣȯ¼ºÀ» À¯ÁöÇÏ·Á°í ³ë·ÂÇÑ´Ù.
¡ß C++¿ÍÀÇ È£È¯¼ºÀ» À¯ÁöÇÑ´Ù.
C ¾ð¾î¿Í C++´Â ÀüÇô º°°³ÀÇ À§¿øÈ¸¿¡ ÀÇÇØ °ü¸®µÇ¸ç ¹ßÀüÇϰí ÀÖ´Â µ¶¸³µÈ ¾ð¾îÀÌ´Ù. µû¶ó¼, C++ÀÇ Ã¢½ÃÀÚÀÎ Bjarne StroustrupÀÇ Ç¥ÇöÀ» ºô¾î C¿Í C++°¡ ¿ª»çÀû ¿ì¿¬¼ºÀ¸·Î ÀÎÇØ °øÅëÁ¡À» °®´Â´Ù°í ÇØµµ ¾ÕÀ¸·Î ¿ÏÀüÈ÷ ´Ù¸¥ ¹æÇâÀ¸·Î ¹ßÀüÇØ³ª°¡µµ ÀüÇô ÀÌ»óÇÑ ÀÏÀÌ ¾Æ´Ï´Ù. ´Ù¸¸ ÇöÀç ½ÇÁúÀûÀÎ ½ÃÀåÀÇ ÀÌÀÍÀ» °í·ÁÇϸé C¿Í C++ »çÀÌÀÇ Â÷À̸¦ °¡±ÞÀû ÁÙ¿©ÁÖ´Â °ÍÀÌ À̵æÀÌ µÇ´Â °æ¿ì°¡ ÀûÁö ¾Ê±â¿¡ °¡±ÞÀû C++¿ÍÀÇ È£È¯¼ºÀ» À¯ÁöÇÏ´Â ¹æÇâÀ¸·Î Ç¥ÁØÈ°¡ ÁøÇàµÈ´Ù. ÇÏÁö¸¸ ¾ÆÀÌ·¯´ÏÇϰԵµ C99´Â C90º¸´Ù C ¾ð¾î¿Í C++ »çÀÌÀÇ °Å¸®¸¦ ´õ ¹ú·Á ³õ¾Ò´Ù. ÀÌ´Â C++ÀÇ 1998³â Ç¥ÁØÀÌ C90À» ÂüÁ¶Çß´ø °Íó·³ Â÷±â C++ Ç¥ÁØÀÌ C99¸¦ ÂüÁ¶ÇÏ¸é¼ Á¶±ÝÀ̳ª¸¶ ÇØ°áµÉ °ÍÀ¸·Î ±â´ëÇÑ´Ù.