[Áöµð³ÝÄÚ¸®¾Æ]Áö³ ±Û¿¡ ÀÌ¾î ¼Ò°³ÇÒ ±â¼úµéÀº ÀÌÀüÀÇ C ¾ð¾î°¡ °¡Áø ¹®Á¦µé°ú ±× ÇØ°áÃ¥ÀÌ C ¾ð¾î Ç¥ÁØÈÀÇ ¿øÄ¢À» ¸¸Á·ÇÏ¿© C99¿¡ »õ·Î ÀÔ¼ºÇÑ °ÍµéÀÌ´Ù. ÀÚ½ÅÀÌ C ÇÁ·Î±×·¡¹ÖÀ» ÇÏ¸é¼ ´À²¼´ø ½ÇÁúÀûÀÎ ºÒÆíÇÔÀ̳ª À̰÷¿¡¼ ¼³¸íÇϰí ÀÖ´Â ¹®Á¦¸¦ °æÇè¿¡ ºñÃß¾î ¶°¿Ã¸®¸é¼ Ç׸ñ ÇϳªÇϳª¸¦ »ìÆìº»´Ù¸é ±â¼úÀûÀÎ ³»¿ëÀÌ ±æ°Ô ÁøÇàµÇ´õ¶óµµ Å©°Ô Áö·çÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù.
¼ö½Ä ¾ø´Â return ¹®ÀÇ Á¦°Å[Lang][Open]
void ÇüÀº ÇÔ¼öÀÇ ¹Ýȯ °ªÀ̳ª ¸Å°³º¯¼ö°¡ ¾øÀ½À» ¸í½ÃÀûÀ¸·Î Ç¥½ÃÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ¿ì¸®¿¡°Ô ³¸¼³Áö ¾ÊÀº ÀÌ void ÇüÀº »ç½Ç C ¾ð¾îÀÇ Ã¹ ¹øÂ° Ç¥ÁØÀÎ C90¿¡¼ µµÀÔµÈ °ÍÀÌ´Ù. ±×º¸´Ù °ú°Å¿¡´Â ¾Õ¼ ¼Ò°³Çß´ø ¾Ï½ÃÀûÀÎ int Çü(implicit int)ÀÌ ±× ¿ªÇÒÀ» ´ë½ÅÇß´Ù.
int foo(int param) bar(int param)
{ {
/* ... */ /* ... */
return result; return;
} }
¾Ï½ÃÀûÀÎ int Çü¿¡ ÀÇÇØ ÇÔ¼ö bar()ÀÇ ¹ÝȯÇüÀº foo()¿Í µ¿ÀÏÇÑ int ÇüÀÌ°í ´ÜÁö ±× ¹Ýȯ°ªÀÌ Á¤ÀǵÇÁö ¾ÊÀº °ªÀÏ »ÓÀÌÁö¸¸, ÇÁ·Î±×·¡¸ÓµéÀº °ü·ÊÀûÀ¸·Î ¹ÝȯÇü¿¡ ¾Ï½ÃÀûÀÎ int ÇüÀ» »ç¿ëÇÑ ÇÔ¼ö¸¦(¸¶Ä¡ Áö±ÝÀÇ void bar(int param);ÀÎ °Íó·³) ¹Ýȯ°ªÀÌ ¾ø´Â ÇÔ¼ö·Î »ç¿ëÇϸç ÇÔ¼ö ¾È¿¡¼ ¼ö½ÄÀÌ µû¶ó¿ÀÁö ¾Ê´Â return ¹®À» »ç¿ëÇØ¿Ô´Ù. ÀÌ·¯ÇÑ °ü·Ê´Â ¾Ï½ÃÀûÀÎ int ÇüÀÌ À¯ÁöµÇ¾ú´ø C95±îÁöµµ Áö¿øµÆÀ¸³ª, C99¿¡¼ °©ÀÛ½º·´°Ô ¾Ï½ÃÀûÀÎ int ÇüÀ» Á¦°ÅÇÏ¸é¼ ¹ÝȯÇü¿¡ ¸í½ÃÀûÀ¸·Î void ÇüÀ» ¾²Áö ¾ÊÀº ÇÔ¼ö¿¡¼ ¼ö½ÄÀÌ ¾ø´Â return ¹®À» ¾²Áö ¸øÇϵµ·Ï ±ÝÁöÇß´Ù. ÀÌ´Â °á°úÀûÀ¸·Î ¹Ù¶÷Á÷ÇÑ º¯È¶ó°í ÇÒ ¼ö ÀÖÀ¸³ª ±âÁ¸ÀÇ C90À̳ª C95 °üÁ¡¿¡¼ ºÐ¸íÈ÷ ¿Ã¹Ù¸£´ø Äڵ带 ¹è·ÁÇÏÁö ¾ÊÀº ´Ù¼Ò ´Ù±ÞÇÑ º¯ÈÀ̱⵵ ÇÏ´Ù.
ÇൿÀÌ Á¤ÀÇµÈ À½ÀÇ Á¤¼ö ³ª´°¼À °á°ú[Lang][Open]
Ä£¼÷ÇÑ »ç½ÇÀ̰ÚÁö¸¸ C ¾ð¾îÀÇ ³ª´°¼À ¿¬»êÀÚ´Â ¿ì¸®°¡ ¾Ë°í ÀÖ´Â ¼öÇаú ´Ù¸£´Ù. Áï ÇÇ¿¬»êÀÚ°¡ ¸ðµÎ Á¤¼öÇüÀÎ °æ¿ì ³ª´²¶³¾îÁöÁö ¾Ê´Â °æ¿ì¿¡µµ °á°ú´Â Á¤¼ö·Î ³ª¿Â´Ù. ¶Ç Çϳª ÇÁ·Î±×·¡¸ÓµéÀÌ ½±°Ô Àذí ÀÖ´Â »ç½ÇÀº Á¤¼ö ³ª´°¼À ¿¬»êÀÌ ÀÌ·ç¾îÁú ¶§ µÎ ÇÇ¿¬»êÀÚ Áß Çϳª¶óµµ À½¼ö¶ó¸é ±× °á°ú°¡ ÄÄÆÄÀÏ·¯¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖ´Ù´Â »ç½ÇÀÌ´Ù. µÎ ÇÇ¿¬»êÀÚ ¸ðµÎ°¡ ¾ç¼öÀÌ¸ç ³ª¸ÓÁö°¡ ¹ß»ýÇÏ´Â °æ¿ì Ç×»ó ¸òÀÇ ¼Ò¼öÁ¡ ÀÌÇϸ¦ ¹ö·Á¼ Á¤¼ö °á°ú¸¦ ¾òÁö¸¸, µÑ Áß Çϳª¶óµµ À½¼öÀ̸é(µÑ´Ù À½¼öÀÎ °æ¿ìµµ Æ÷ÇÔ) ¼Ò¼öÁ¡ ÀÌÇϸ¦ ¹ö¸±Áö, ¡¾¡Ä ÂÊÀ¸·Î ¹Ý¿Ã¸²ÀÌ ÀÌ·ç¾îÁúÁö Ç¥ÁØÀÌ Á¤ÀÇÇÏÁö ¾Ê´Â´Ù.
int q = 7 / -3; /* -2 or -3 */
int r = 7 % -3; /* 1 or -2 */
/* ´Ü, r == 7 - (q * -3) ¸¦ ¸¸Á· */
ÃÖ´ëÇÑÀÇ À̽ļºÀ» °ÆÁ¤ÇÏ´Â ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ÅëÇØ ȯ°æ¿¡ ¹«°üÇÏ°Ô ³ª´°¼À°ú ³ª¸ÓÁö ¿¬»êÀÚÀÇ °á°ú¸¦ ¸ñÀû¿¡ ¸Âµµ·Ï Á¶Á¤ÇؿԴÙ(¿¹¿¡¼ r, q, a, b´Â ¸ðµÎ Á¤¼öÇüÀÌ´Ù).
ÇÏÁö¸¸ À½ÀÇ Á¤¼ö¸¦ ÇÇ¿¬»êÀÚ·Î °®´Â ³ª´°¼À °á°ú¸¦ ¡Ä ÂÊÀ¸·Î ¹Ý¿Ã¸²Çϴ ȯ°æÀÌ C90ÀÌ Á¦Á¤µÉ ´ç½Ã¿¡µµ ¼Ò¼ö¿´´ø ¸¸Å C99°¡ Á¦Á¤µÉ ´ç½Ã¿¡´Â ÇÑ Ç¥ÀÇ ¹Ý´ë ¾øÀÌ À½¼ö¸¦ Æ÷ÇÔÇÑ Á¤¼ö ³ª´°¼ÀÀÇ °á°ú¸¦ Ç×»ó ¼Ò¼öÁ¡ ÀÌÇÏ ¹ö¸²À¸·Î Á¤ÀÇÇÒ ¼ö ÀÖ¾ú´Ù. Âü°í·Î Ç¥ÁØÀÌ ¼±ÅÃÇÑ ¹æ½ÄÀº Æ÷Æ®¶õÀ» µû¸£´Â °ÍÀ̸ç, Ç¥ÁØÀÌ ±ÝÁöÇÑ ¹æ½ÄÀº °ú°Å ÆÄ½ºÄ®¿¡¼ ¸¸³¯ ¼ö ÀÖ´ø ¹æ½ÄÀÌ´Ù.
ÁöÁ¤µÈ ÃʱâÄ¡[Lang][Open]
C ¾ð¾î°¡ Á¦°øÇϰí ÀÖ´Â ¹è¿À̳ª ±¸Á¶Ã¼ ȤÀº °ø¿ëüÀÇ ÃʱâÈ ±ÔÄ¢Àº Áö³ªÄ¡°Ô ¾ö°ÝÇÑ ¸éÀÌ ¾øÁö ¾Ê¾Ò´Ù. ¿ì¼± °ø¿ëüÀÇ °æ¿ì Ç×»ó ù ¹øÂ°·Î ¼±¾ðµÈ ¸â¹ö¸¸À» ÃʱâÈÇÒ ¼ö ÀÖ¾ú´Ù. µû¶ó¼ ÃʱâÈÇÏ·Á´Â ´ë»óÀÌ ¹Ù²î¸é °ø¿ëüÀÇ ¸â¹ö ¼±¾ð ¼ø¼¸¦ ¹Ù²ã¾ß¸¸ Çß´Ù.
union { int a; double b; } foo = { 12 };
/* ¸â¹ö int a¸¦ À§ÇÑ ÃʱâÄ¡ */
¶ÇÇÑ ¹è¿À̳ª ±¸Á¶Ã¼¸¦ ÃʱâÈÇÒ ¶§ Áß°£¿¡ Á¸ÀçÇÏ´Â ¸â¹ö ÀϺθ¸À» ÃʱâÈÇÏ´Â °æ¿ì ±× ÀÌÀüÀÇ ¸ðµç ¿ä¼Ò³ª ¸â¹ö¿¡ ÃʱâÄ¡¸¦ Á¦°øÇؾ߸¸ Çß´Ù.
int a[200] = { /* 100°³ÀÇ Àû´çÇÑ ÃʱâÄ¡ */, 7903, };
/* a[100]À» 7903À¸·Î ÃʱâÈ */
ÀÌ·¯ÇÑ ºÒÆíÀ» ÇØ¼ÒÇϰíÀÚ C99¿¡´Â ƯÁ¤ ¸â¹ö³ª ¿ä¼Ò¸¦ Á÷Á¢ ÁöÁ¤ÇØ ÃʱâÄ¡¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
union { int a; double b; } foo = { .b = 3.14159 };
int a[200] = { [100] = 7903 };
ÀÌ·¸°Ô ÁöÁ¤µÈ ¸â¹ö¿¡ ´ëÇØ ÃʱâÄ¡¸¦ Á¦°øÇÏ´Â ¹æ½ÄÀº ´ÙÀ½ È£¿¡ ¼Ò°³ÇÒ º¹ÇÕ »ó¼ö(compound literal)¿Í ÇÔ²² ÇÁ·Î±×·¥¿¡ °·ÂÇÑ À¯¿¬¼ºÀ» Á¦°øÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ¿©±â¼´Â °£´ÜÈ÷ ´Ü¼ø ¹è¿°ú ±¸Á¶Ã¼¿¡ ´ëÇÑ ¿¹¸¦ º¸¾ÒÀ¸³ª ¹è¿À» ¸â¹ö·Î Æ÷ÇÔÇÏ´Â ±¸Á¶Ã¼ µîÀÇ °æ¿ì¿¡µµ ÀÌ ¹æ¹ýÀº Àç±ÍÀûÀ¸·Î Àû¿ëµÈ´Ù.
ÁýÇÕü³ª °ø¿ëü ÃʱâÄ¡ÀÇ Á¦ÇÑ ¿ÏÈ[Lang][Open]
ÇÔ¼ö ³»ºÎ¿¡¼ ¼±¾ðµÇ¾î ÀÚµ¿ ±â¾ï ¼ö¸í(auto storage duration)À» °®´Â ½ºÄ®¶óÇü(scalar type)ÀÇ º¯¼ö´Â ÃʱâÄ¡°¡ »ó¼ö ¼ö½ÄÀÌ ¾Æ´Ï¾îµµ »ó°ü¾ø´Ù. ÇÏÁö¸¸ ÁýÇÕü(aggregate, ¹è¿°ú ±¸Á¶Ã¼¸¦ ¹¾î ºÎ¸£´Â ¿ë¾î)³ª °ø¿ëüÀÇ °æ¿ì¿¡´Â ±â¾ï ¼ö¸íÀÌ Á¤Àû(static)ÀÌ ¾Æ´Ñ °æ¿ì¿¡µµ ¾ð¾îÀÇ º¹À⼺À» Á¦°ÅÇÑ´Ù´Â ÀÌÀ¯·Î ÃʱâÄ¡¸¦ »ó¼ö ¼ö½ÄÀ¸·Î Á¦ÇÑÇØ¿Ô´Ù. C99´Â ÀÚµ¿ ±â¾ï ¼ö¸í¿¡ ÇÑÇØ¼ ÁýÇÕü³ª °ø¿ëüÀÇ ÃʱâÄ¡°¡ »ó¼ö ¼ö½ÄÀÌ ¾Æ´Ò ¼ö ÀÖµµ·Ï Çã¿ëÇϰí ÀÖ´Ù.
int base = 12;
int static_duration[10] =
{ base+1, base+1, base+2, base+3, }; /* wrong in C90/C99 */
void foo(void)
{
int local_base = 79;
int auto_duration[10] =
{ base+1, base+1, base+2, base+3, }; /* okay in C99 */
/* ... */
ÀÚµ¿ ±â¾ï ¼ö¸íÀÇ ÁýÇÕüÇü ÃʱâÄ¡¸¦ »ó¼ö ¼ö½ÄÀ¸·Î Á¦ÇÑÇÏÁö ¸»ÀÚ´Â ¿ä±¸´Â »ç½Ç C90 ½ÃÀýºÎÅÍ ÀÖ¾ú±â¿¡ ±»ÀÌ C99¸¦ Áö¿øÇÏÁö ¾Ê´Â ȯ°æ¿¡¼µµ È®ÀåÀ» ÅëÇØ ÀÌ ±â¼úÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
C++ ½ºÅ¸ÀÏÀÇ ÁÖ¼®[Lang][Open][C++]
C90Àº C++ ½ºÅ¸ÀÏÀÇ ÁÖ¼®À» Áö¿øÇÏÁö ¾Ê¾Ò´Ù. ÇÏÁö¸¸ C++°¡ ³Î¸® Àα⸦ ¾òÀ¸¸é¼ C¿¡¼µµ C++ ÇüÅÂÀÇ ÁÖ¼®À» »ç¿ëÇÏ´Â »ç¶÷ÀÌ ´Ã°Ô µÇ¾ú°í ´ëºÎºÐÀÇ C/C++ ÄÄÆÄÀÏ·¯´Â Ưº°È÷ C90À̳ª C95¸¦ ¾ö°ÝÈ÷ Áö۵µ·Ï ¿É¼ÇÀ» ÁÖÁö ¾Ê´Â ÀÌ»ó C ÇÁ·Î±×·¥¿¡¼µµ C++ ÁÖ¼®À» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¹è·ÁÇØ¿Ô´Ù. C99´Â ÀÌ·¯ÇÑ °ü·Ê¸¦ ¹Þ¾ÆµéÀ̰í, µ¿½Ã¿¡ C¿Í C++ »çÀÌÀÇ Â÷À̸¦ ÃÖ¼ÒÈÇϱâ À§Çؼ º»°ÝÀûÀ¸·Î C¿¡ C++ ÁÖ¼®À» µµÀÔÇÏ°Ô µÈ´Ù. ½ÇÁúÀûÀÎ ÇÁ·Î±×·¥¿¡ ¿µÇâÀ» ÁÖ´Â °æ¿ì°¡ µå¹°±â´Â ÇØµµ ÀÌ ÀÛÀº º¯È´Â ÀÌÀü È£¿¡¼ ¾ð±ÞÇß´ø ¡®Á¶¿ëÇÑ º¯È¡¯¿¡ ÇØ´çÇÑ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½ ÇÁ·Î±×·¥Àº C90/C95¿Í C99(ȤÀº C++)¿¡¼ ´Ù¸¥ °á°ú¸¦ º¸ÀδÙ.
¸¹Àº »ç¶÷µéÀÌ C/C++ ÁÖ¼®ÀÇ ±¸ºÐ ¾øÀÌ C99 ¹ßÇ¥ ÀÌÀüºÎÅÍ C ÇÁ·Î±×·¥¿¡¼ C++ ÁÖ¼®À» »ç¿ëÇØ ¿ÔÁö¸¸ »ç½Ç»ó C++ ÁÖ¼®Àº C99¸¦ Áö¿øÇϴ ȯ°æ¿¡¼¸¸ Àû¹ýÇÏ°Ô C ÇÁ·Î±×·¥¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» ±â¾ïÇÒ Çʿ䰡 ÀÖ´Ù. ¿¹¸¦ µé¾î Ç¥ÁØ(C90/C95)À» ÁؼöÇϸç ÃÖ¼ÒÇÑÀÇ È®ÀåÀ» Áö¿øÇÏ´Â °³¹ß ȯ°æ¿¡¼´Â ¿©ÀüÈ÷ C ¾ð¾î °íÀ¯ÀÇ ÁÖ¼®¸¸À» Çã¶ôÇϸç ÇÁ·Î±×·¡¸ÓÀÇ À߸øµÈ ½À°üÀ¸·Î C++ ÁÖ¼®À» ´Ù¼ö »ç¿ëÇÑ C ÇÁ·Î±×·¥À» ÇØ´ç ȯ°æÀ¸·Î ¿Å±â´Â ÀÛ¾÷Àº ¿©°£ °í¿ªÀÌ ¾Æ´Ò ¼ö ¾ø´Ù.
¾Ï½ÃÀûÀÎ ÇÔ¼ö ¼±¾ð Á¦°Å[Lang][Open]
Çö´ë ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¿øÄ¢ Áß Çϳª´Â ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ´Â ¸ðµç ¸íĪÀº ÀûÀýÇÏ°Ô ¼±¾ðµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù(±×·¡¾ß ÀûÀýÇÑ µ¥ÀÌÅÍÇü °Ë»ç¸¦ ÅëÇØ ¾ÈÁ¤¼ºÀ» È®º¸Çϱ⠿ëÀÌÇØÁø´Ù). ÇÏÁö¸¸ C ¾ð¾î´Â ±× ½ÃÀÛÀ» µ¥ÀÌÅÍÇüÀ» °®Áö ¾Ê´Â BCPL, B ¾ð¾î¿¡ µÎ°í Àֱ⿡ ÇÔ¼ö ¼±¾ð°ú °ü·ÃµÈ ºÎºÐ¿¡¼µµ ÀÌÀü¿¡ ´Ù·ç¾ú´ø ¾Ï½ÃÀûÀÎ int Çü°ú À¯»çÇÑ Æ¯Â¡À» °®´Â´Ù.
ÀÌ ¿¹¿¡¼ º¼ ¼ö ÀÖµíÀÌ ¸¸¾à ¾î¶² ÇÔ¼ö foo()°¡ ¼±¾ðÀÌ Á¦°øµÇÁö ¾ÊÀº »óÅ¿¡¼ È£ÃâµÇ¸é ±× ÇÔ¼ö°¡ È£ÃâµÇ´Â °¡Àå ¾ÈÂÊ Åë¿ë¹üÀ§(scope)¿¡ ¿ÜºÎ ¿¬°á(external linkage)À» °®°í Á¤¼öÇüÀ» ¹ÝȯÇÏ¸ç ¸Å°³º¯¼ö¿¡ ´ëÇÑ Á¤º¸°¡ ¾Ë·ÁÁöÁö ¾ÊÀº ÇÔ¼ö ¼±¾ð(¾Ï½ÃÀûÀÎ ÇÔ¼ö ¼±¾ð)ÀÌ Á¸ÀçÇÏ´Â °Íó·³ µ¿ÀÛÇÑ´Ù.
¶ÇÇÑ ¸¸¾à ½ÇÁ¦ ÇÔ¼öÀÇ Á¤ÀÇ ÇüŰ¡ ¾Ï½ÃÀûÀÎ ÇÔ¼ö ¼±¾ð°ú ȣȯµÈ´Ù¸é ÇÁ·Î±×·¥ ÀÚü´Â ±â¼úÀûÀ¸·Î ¿Ã¹Ù¸¥ ±¸Á¶°¡ µÈ´Ù. ÇÏÁö¸¸ ÀÌ·± ±¸Á¶´Â ¾Ï½ÃÀûÀÎ ÇÔ¼ö ¼±¾ðÀÌ Çã¿ëµÇ´ø ½ÃÀý¿¡µµ ±×¸® ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº °ÍÀ¸·Î ÀÎ½ÄµÇ¾î ¿Ô±â¿¡ C99¿¡¼´Â ¸ðµç ÇÔ¼ö°¡ ºüÁü¾øÀÌ È£Ãâ Àü¿¡ ÀûÀýÈ÷ ¼±¾ðµÇµµ·Ï ¿ä±¸Çϰí ÀÖ´Ù. À̹ø¿¡µµ Ç¥ÁØÀº ¾Ï½ÃÀûÀÎ ¼±¾ðÀ» ±¸½Ä ±â¼ú·Î ±ÔÁ¤ÇÏ´Â ±â°£ ¾øÀÌ °©ÀÛ½º·´°Ô Á¦°ÅÇßÀ¸³ª ´Ù¼öÀÇ ÄÄÆÄÀÏ·¯´Â ÀûÀýÇÑ °æ°í ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ¸ç °è¼Ó ¾Ï½ÃÀûÀÎ ÇÔ¼ö ¼±¾ðÀ» Áö¿øÇÔÀ¸·Î½á Á¡Â÷ ±ÝÁöÇØ³ª°¥ °ÍÀ¸·Î º¸ÀδÙ.
¼±¾ð°ú ¹®Àå ¼¯¾î ¾²±â[Lang][Open][C++]
C´Â C++¿Í ´Þ¸® ¸ðµç ºí·°(block, compound statement) ³»¿¡¼ ¼±¾ðÀ» ¹®À庸´Ù ¾Õ¿¡ µÎ¾î¾ß ÇÑ´Ù´Â ´Ù¼Ò ¾ö°ÝÇÑ ±ÔÄ¢À» °¡Áö°í ÀÖ¾ú´Ù. ÀÌ·¯ÇÑ ±ÔÄ¢ÀÌ ¼±¾ðÀ» ÇÑ °÷¿¡ ÁýÁß½ÃŲ´Ù´Â ÀåÁ¡À» °®Áö¸¸ µ¿½Ã¿¡ ÇÔ¼öÀÇ ±æÀ̰¡ ±æ¾îÁö´Â °æ¿ì ¼±¾ðÀ» È®ÀÎÇϱâ À§ÇØ ¸Å¹ø ÇÔ¼öÀÇ ½ÃÀÛ ºÎºÐÀ» ã¾ÆºÁ¾ß ÇÑ´Ù´Â ´ÜÁ¡À» °®´Â´Ù. ¹°·Ð ÇÑ ÇÔ¼ö°¡ ´ã´çÇÏ´Â ÀÏÀÌ ³í¸®ÀûÀ¸·Î ±¸ºÐµÈ ¸î °³ÀÇ ÀÛ¾÷À¸·Î ³ª´µ´Â °æ¿ì ´ÙÀ½°ú °°ÀÌ ÁßøµÈ ºí·ÏÀ» »ç¿ëÇØ ÇÁ·Î±×·¥ÀÇ °¡µ¶¼ºÀ» ³ôÀÌ´Â °Íµµ °¡´ÉÇÏ´Ù.
double foo(void)
{
double result, sum;
{ /* ù ¹øÂ° ³í¸®Àû ´ÜÀ§ ÀÛ¾÷ */
int first_result;
/* ... */
}
{ /* µÎ ¹øÂ° ³í¸®Àû ´ÜÀ§ ÀÛ¾÷ */
int second_result;
/* ... */
}
/* ... */
±×·¸Áö¸¸ C++¸¦ ºñ·ÔÇÑ ¿äÁòÀÇ ¾ð¾îµéÀÌ ±×·¯ÇϵíÀÌ ¹®Àå°ú ¼±¾ðÀ» ¼¯¾î¼ ¾µ ¼ö ÀÖµµ·Ï Çã¶ôÇÏ´Â °ÍÀÌ ½Çº¸´Ù´Â µæÀÌ ´õ ¸¹´Ù´Â ÆÇ´Ü ¾Æ·¡ C++¿Í ¸¶Âù°¡Áö·Î ¹®Àå°ú ¼±¾ðÀ» ¼¯¾î ¾µ ¼ö ÀÖµµ·Ï Çã¿ëÇÏ°Ô µÆ´Ù.
double foo(void)
{
double result, sum;
/* ù ¹øÂ° ³í¸®Àû ´ÜÀ§ ÀÛ¾÷ */
int first_result;
/* ... */
/* µÎ ¹øÂ° ³í¸®Àû ´ÜÀ§ ÀÛ¾÷ */
int second_result;
/* ... */
¹°·Ð ÀÌó·³ ¹®Àå°ú ¼±¾ðÀ» ¼¯¾î »ç¿ëÇÒ ¶§´Â ±× µµÀÔ ÃëÁö¸¦ ºÐ¸íÈ÷ ÀÌÇØÇØ ÇÁ·Î±×·¥ÀÇ °¡µ¶¼ºÀ» ÁõÁø½ÃŰ´Â ¹æÇâÀ¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ ±â¼úÀÇ °æ¿ì ¾ç³¯ÀÇ Ä®°ú °°±â¿¡ À߸ø »ç¿ëÇÒ °æ¿ì ÇÁ·Î±×·¥À» ÀÌÇØÇÏ±â ¾î·Æ°Ô ¸¸µå´Â ºÎÀÛ¿ëÀ» ³ºÀ» ¼öµµ ÀÖ´Ù.
°¡º¯ ÀÎÀÚ ¸ÅÅ©·Î[Lang][Open]
C90/C95´Â printf()ó·³ °¡º¯ ÀÎÀÚ¸¦ ¹Þ´Â ÇÔ¼ö¸¦ Ç¥ÁØ ¶óÀ̺귯¸®ÀÎ
¸¦ ÅëÇØ Áö¿øÇÏÁö¸¸ °¡º¯ ÀÎÀÚ¸¦ ¹Þ´Â ¸ÅÅ©·Î ÇÔ¼ö(function-like macro)´Â Áö¿øÇÏÁö ¾Ê¾Ò´Ù. ¸ÅÅ©·Î¿¡ °¡º¯ ÀÎÀÚ¸¦ Çã¿ëÇÏ´Â °æ¿ì µð¹ö±ë¿¡ ºó¹øÇÏ°Ô »ç¿ëµÇ´Â ¸ÅÅ©·Î ÇÔ¼ö µîÀ» ¼Õ½±°Ô ÀÛ¼ºÇÒ ¼ö Àֱ⿡ ´Ù¼öÀÇ ÄÄÆÄÀÏ·¯´Â È®ÀåÀ» ÅëÇØ ³ª¸§´ë·Î ±× ¹æ¹ýÀ» Á¦°øÇØ ¿Ô´Ù. ÇÏÁö¸¸ À̽ļºÀ» °í·ÁÇÏ´Â ÇÁ·Î±×·¥Àº ¹Ýµå½Ã °¡º¯ ÀÎÀÚ ¸ÅÅ©·Î°¡ ÇÊ¿äÇÑ °æ¿ì ´ÙÀ½°ú °°Àº Æí¹ýÀ» ÅëÇØ ¿øÇÏ´Â ¹Ù¸¦ ÀÌ·ç±âµµ Çß´Ù.
#define debug(args) printf args #define comma ,
debug(("%d, %d\n", i, j)); #define debug(s, args) printf(s, args)
debug("%d, %d\n", i comma j);
°¡º¯ ÀÎÀÚ ¸ÅÅ©·ÎÀÇ Çʿ伺Àº C90 ½ÃÀýºÎÅÍ Á¦±âµÇ¾î ¿ÔÀ¸³ª C99¿¡ ¿Í¼¾ß ±× ¿ä±¸°¡ ¹Þ¾Æµé¿©Á® ÀÌÁ¦ ÄÄÆÄÀÏ·¯ÀÇ È®Àå¿¡ ÀÇÁ¸ÇÒ ÇÊ¿ä ¾øÀÌ °¡º¯ ÀÎÀÚ ¸ÅÅ©·Î¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Â ÅëÀÏµÈ ¹æ¹ýÀÌ »ý°å´Ù.
#define debug(s, ...) printf(s, __VA_ARGS__)
ÀÌ ¹æ¹ýÀº ¿¡¼¿Í À¯»çÇÑ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù´Â ÀåÁ¡À» °®Áö¸¸ ±âÁ¸ÀÇ ÄÄÆÄÀÏ·¯ È®Àå¿¡¼ ã¾Æº¸±â ¾î·Á¿î ÇüÅÂÀ̱⿡ C99¸¦ ÀüÇô Áö¿øÇÏÁö ¾Ê´Â ÄÄÆÄÀÏ·¯¿¡¼´Â »ç¿ëÀÌ ºÒ°¡´ÉÇÏ´Ù´Â ´ÜÁ¡À» °®´Â´Ù. ¸¸¾à »ç¿ë ÁßÀÎ ÄÄÆÄÀÏ·¯°¡ C99¿¡ ºÎÇÕÇÏ´Â ¹æ¹ý°ú ±âÁ¸ÀÇ È®ÀåÀ» ¸ðµÎ Á¦°øÇÑ´Ù¸é °ú°¨È÷ Ç¥ÁØÀÌ Á¦°øÇÏ´Â ¹æ¹ýÀ» ¼±ÅÃÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
ºó ¸ÅÅ©·Î ÀÎÀÚ[Lang][Open]
°¡º¯ ÀÎÀÚ ¸ÅÅ©·Î¿Í ´õºÒ¾î ¸ÅÅ©·Î ÇÔ¼ö¿¡¼ À¯¿ëÇÏ°Ô »ç¿ëµÇ´Â °Í Áß Çϳª°¡ ºó ¸ÅÅ©·Î ÀÎÀÚÀÌ´Ù(ÀÌ °æ¿ì ÇØ´ç ¸ÅÅ©·Î¿¡¼ ±âº»°ªÀ» Á¦°øÇÏ´Â °³³äÀÌ ¾Æ´Ï¶ó ÀÏÁ¾ÀÇ ºó ÅäÅ«ÀÌ Á¦°øµÇ´Â ¹æ½ÄÀÌ´Ù). ¸ÅÅ©·Î ÇÔ¼ö¿¡¼ ÀÎÀÚ °³¼ö¿Í ¸Å°³º¯¼ö°¡ Á¤È®ÇÏ°Ô ÀÏÄ¡ÇØ¾ß ÇÑ´Ù´Â ±ÔÄ¢À¸·Î ºó ¸ÅÅ©·Î ÀÎÀÚ¸¦ Á¦°øÇÏ´Â °Í ¿ª½Ã ±×µ¿¾È ºñÇ¥ÁØÀÎ ÄÄÆÄÀÏ·¯ È®ÀåÀ» ÅëÇØ »ç¿ëÇØ¿Ô´Ù. C99¿¡¼´Â °¡º¯ ÀÎÀÚ ¸ÅÅ©·Î¸¦ µµÀÔÇÏ¸é¼ µ¿½Ã¿¡ ºó ¸ÅÅ©·Î ÀÎÀÚµµ Çã¿ëÇÑ´Ù.
#define decl_ptr(prefeix, num) \
char *prefix ## num = #num
decl_ptr(element, 13);
/* char *element13 = "13"; */
decl_ptr(element, );
/* char *element = ""; */
ÀÌ ¿¹´Â ºó ¸ÅÅ©·Î ÀÎÀÚ¸¦ »ç¿ëÇÏ´Â ¸ð½ÀÀ» º¸¿©ÁÖ´Â °ÍÀ¸·Î µÎ ¹øÂ° decl_ptr() È£ÃâÀº ºó ¸ÅÅ©·Î ÀÎÀÚ¸¦ Áö¿øÇÏÁö ¾Ê´Â C90/C95¿¡¼´Â À߸øµÈ °ÍÀÌ´Ù(¹°·Ð ´Ù¼öÀÇ C90/C95 ÄÄÆÄÀÏ·¯°¡ È®ÀåÀ» ÅëÇØ À̸¦ Áö¿øÇϰí´Â ÀÖ´Ù).
printf()ÀÇ %lf Áö¿ø[Lib][Open]
¸¹Àº C ÇÁ·Î±×·¡¸ÓµéÀÌ È¥µ¿ÇÏ´Â °Í Áß Çϳª°¡ double ÇüÀ» printf()¸¦ ÅëÇØ ÀμâÇÒ ¶§ ´ÙÀ½°ú °°Àº ¹æ½ÄÀ» »ç¿ëÇÑ´Ù´Â °ÍÀÌ´Ù.
printf("%lf\n", 3.14159); /* wrong in C90 */
ÀÌ´Â ±âº»ÀûÀ¸·Î %f°¡ float Çü¿¡ ´ëÀÀÇϱ⠶§¹®¿¡ À̺¸´Ù Å« double Çü¿¡´Â %lf¸¦ ½áÁà¾ß ÇÑ´Ù´Â ¿ÀÇØ³ª, scanf()¿¡¼´Â %lf°¡ double Çü¿¡ ´ëÀÀÇϱ⠶§¹®¿¡ printf() ¿ª½Ã µ¿ÀÏÇÒ °ÍÀ̶ó´Â Âø°¢¿¡ ±âÀÎÇÑ´Ù. Áß¿äÇÑ »ç½ÇÀº printf()ó·³ °¡º¯ ÀÎÀÚ¸¦ ¹Þ´Â ÇÔ¼öÀÇ °¡º¯ ÀÎÀڵ鿡´Â ±âº» ÀÎÀÚ Áø±Þ(default argument promotion)ÀÌ Àû¿ëµÇ±â ¶§¹®¿¡ float ÇüÀÌ Ç×»ó double ÇüÀ¸·Î º¯È¯µÇ¾î Àü´ÞµÈ´Ù. Áï printf() ÇÔ¼öÀÇ ÀÔÀå¿¡¼´Â float ÇüÀ» ¹ÞÀ» ¼ö ¾ø°í Ç×»ó double Çü¸¸ ¿À±â¿¡ float Çü°ú double ÇüÀ» ±¸ºÐÇÒ Çʿ䰡 ¾ø´Â ¼ÀÀÌ´Ù. µû¶ó¼ ´ÙÀ½ ¿¹¿¡¼ º¸´Â °Íó·³ float Çü°ú double ÇüÀº µ¿ÀÏÇÏ°Ô %f¸¦ ÅëÇØ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.
printf("%f, %f\n", 3.14159f, 3.14159);
ÇÁ·Î±×·¡¸ÓÀÇ ¿ÀÇØ°¡ ³í¸®ÀûÀ¸·Î Áö±ØÈ÷ ÀÚ¿¬½º·´°í, ¶Ç scanf()¿Í printf() »çÀÌÀÇ ´ëμºÀ» ¸ÂÃß±â À§ÇÑ ³ë·ÂÀ¸·Î C99¿¡¼´Â %lf¸¦ »õ·Î µµÀÔÇÏ°í ±× Àǹ̸¦ %f¿Í µ¿ÀÏÇÑ °ÍÀ¸·Î Á¤ÀÇÇØÁÖ°í ÀÖ´Ù.
snprintf() ÇÔ¼ö±ºÀÇ µµÀÔ[Lib][Open]
sprintf()´Â fprintf()¿Í À¯»çÇÏÁö¸¸ ½ºÆ®¸²(stream)ÀÌ ¾Æ´Ñ ¹®ÀÚ¿·Î ±× °á°ú¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù. µû¶ó¼ °á°ú¸¦ ÀúÀåÇϱâ À§ÇÑ ¹öÆÛ¸¦ Á¦°ø¹Þ°Ô µÇ°í ¹öÆÛÀÇ ±æÀ̸¦ ¾Ë ¼ö ¾ø±â¿¡ Ãâ·Â °á°ú°¡ ¹öÆÛÀÇ Å©±âº¸´Ù Ŭ °æ¿ì °ð¹Ù·Î ¹öÆÛ ¿À¹ö·±(buffer overrun)À» ÀÏÀ¸Å°°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î sprintf()´Â ¿À·¡ ÀüºÎÅÍ º¸¾È¿¡ Ãë¾àÇÑ ÇÔ¼ö·Î ÀÎ½ÄµÇ¾î ¿ÔÀ¸¸ç C90 Á¦Á¤ ´ç½Ã ´õ¿í ¾ÈÀüÇÏ°Ô ¹öÆÛÀÇ ±æÀ̸¦ Á¦°øÇϰí Ãâ·ÂÀÌ ±× ±æÀ̸¦ ³ÑÁö ¾Êµµ·Ï ÇØÁÖ´Â snprintf() ÇÔ¼ö¸¦ Ãß°¡ÇÏÀÚ´Â Á¦¾ÈÀÌ ÀÖ¾úÀ¸³ª 2/3ÀÇ µæÇ¥¸¦ ¾òÁö ¸øÇØ Á¦¿ÜµÈ ¹Ù ÀÖ´Ù. C99¿¡¼´Â ±× Á¦¾ÈÀÌ ¹Þ¾Æµé¿©Á® snprintf()°¡ Ç¥ÁØ ÇÔ¼ö·Î Á¦°øµÈ´Ù(ÀÌÀü¿¡´Â ´Ù¼öÀÇ ÄÄÆÄÀÏ·¯°¡ È®ÀåÀ» ÅëÇØ À̸¦ Á¦°øÇؿԴÙ).
Áߺ¹ °¡´ÉÇÑ Çü ÇÑÁ¤¾î[Lang][Lib][Open]
¡®idempotent¡¯¶õ ¿©·¯¹ø »ç¿ëµÇ¾îµµ Çѹø »ç¿ëµÈ °Í°ú µ¿ÀÏÇÑ °á°ú¸¦ °®´Â Ư¼ºÀ» ¸»ÇÑ´Ù. C ¾ð¾î¿¡¼ const³ª volatile °°Àº Çü ÇÑÁ¤¾î(type qualifier)´Â Á÷Á¢ÀûÀ̵ç typedef¸¦ ÅëÇØ¼µç °°Àº °ÍÀ» Áߺ¹ »ç¿ëÇÒ ¼ö ¾ø¾ú´Ù.
const const int i; /* wrong in C90 */
int * volatile volatile i; /* wrong in C90 */
ÇÏÁö¸¸ C99¿¡¼´Â À̸¦ Çã¶ôÇÑ´Ù. ±× ÀÌÀ¯ Áß Çϳª´Â ¹Ù·Î C ¾ð¾î¿¡¼ ºñµ¿±â ½Ã±×³Î(asynchronous signal)¿¡¼µµ Ç×»ó ¿øÀÚÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖÀ½ÀÌ º¸ÀåµÇ´Â µ¥ÀÌÅÍÇüÀÎ sig_atomic_t(¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù)¿Í °ü·ÃµÇ¾î ÀÖ´Ù. sig_atomic_t´Â ȯ°æ¸¶´Ù ´Ù¸¥ Á¤¼öÇüÀ¸·Î Á¤ÀǵǴ typedef ¸íÀ¸·Î º¸Åë ½Ã±×³Î Çڵ鷯(asynchronous signal handler) ¾È¿¡¼ ½Ã±×³ÎÀÌ ¹ß»ýÇßÀ½À» ¾Ë¸®´Â Ç÷¡±×(flag) ¿ªÇÒÀ» ÇÑ´Ù.
¹®Á¦´Â Ç¥ÁØÀÌ ½Ã±×³Î Çڵ鷯 ¾È¿¡¼ ±×¿Í °°Àº ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÇüÀ» sig_atomic_t°¡ ¾Æ´Ñ volatile sig_atomic_t·Î ±ÔÁ¤Çϰí ÀÖ´Ù´Â »ç½ÇÀÌ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¸¹Àº ÇÁ·Î±×·¡¸ÓµéÀº ½À°üÀûÀ¸·Î sig_atomic_t¸¸À¸·Î ½Ã±×³Î Çڵ鷯¿ë Ç÷¡±×¸¦ ¼±¾ðÇØ¿Ô°í À̸¦ À§ÇØ ´Ù¼öÀÇ ÄÄÆÄÀÏ·¯´Â sig_atomic_t Çü¿¡ ÀÌ¹Ì volatileÀ» Æ÷ÇÔ½ÃÄÑ ¿Ô´Ù. ÀÌ °æ¿ì Ç¥ÁØÀ» ¿Ã¹Ù¸£°Ô Áö۰í volatile sig_atomic_t ÇüÀ» »ç¿ëÇÑ ÇÁ·Î±×·¥µéÀº sig_atomic_t¿¡ ³»ÀçµÇ¾î ÀÖ´Â volatile ¶§¹®¿¡ µ¿ÀÏÇÑ Çü ÇÑÁ¤¾î¸¦ Áߺ¹ »ç¿ëÇÏ°Ô µÈ´Ù.
µû¶ó¼ C Ç¥ÁØÀº Çü ÇÑÁ¤¾î Áߺ¹À» Çã¿ëÇÔÀ¸·Î½á ±×¿Í °°Àº À߸øµÈ ÇÁ·Î±×·¥°ú ÄÄÆÄÀÏ·¯¸¦ Æ÷¿ëÇÑ °ÍÀÌ´Ù. ÇÑ °¡Áö ±â¾ïÇØ¾ß ÇÒ »ç½ÇÀº »ç¿ëÇÏ´Â ¶óÀ̺귯¸®ÀÇ ¿¡ sig_atomic_t°¡ voaltileÀ» Æ÷ÇÔÇÏµç ±×·¸Áö ¾Êµç Ç¥ÁØÀ» µû¸£´Â ÇÁ·Î±×·¥Àº ½Ã±×³Î Çڵ鷯¿ë Ç÷¡±×¸¦ ¼±¾ðÇÒ ¶§´Â ¿©ÀüÈ÷ volatile sig_atomic_t¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
va_copy() ¸ÅÅ©·Î[Lib][Open]
C90¿¡¼´Â °¡º¯ ÀÎÀÚ¸¦ Á¦¾îÇϱâ À§ÇØ »ç¿ëµÇ´Â va_list Çü(¿¡ ¼±¾ðµÇ¾î ÀÖÀ½)ÀÇ º¯¼ö¸¦ ¾ÈÀüÇÏ°Ô º¹»çÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê¾Ò´Ù. Áï va_start()-va_end() ½ÖÀ» µÎ ¹ø »ç¿ëÇÏÁö ¾Ê°í µ¿½Ã¿¡ °¡º¯ ÀÎÀÚ¸¦ µÎ ¹ø ÈÈÀ» ¼ö ÀÖ´Â À̽ļº ÀÖ´Â ¹æ¹ýÀÌ Á¸ÀçÇÏÁö ¾Ê¾Ò´Ù.
int foo(int n, ...)
{
int i, sum;
va_list ap, aq;
va_start(ap, n);
while ((i = va_arg(ap, int)) >= 0)
sum += i;
aq = ap; /* º¹»ç ½Ãµµ: ¾È µÉ ¼öµµ ÀÖÀ½ */
for (i = 0; i < n; i++)
sum += va_arg(ap, int);
for (i = 0; i < n; i++)
sum -= bar(va_arg(ap, int));
va_end(ap);
return sum;
}
ÀÌ ¿¹¿¡¼´Â aq¿¡ ap¸¦ ´ëÀÔÇÔÀ¸·Î½á °¡º¯ ÀÎÀÚ ¸®½ºÆ®¸¦ µ¿½Ã¿¡ µÎ¹ø ½ºÄµÇÒ ¼ö ÀÖ´Â Á¤º¸°¡ ¿ÏÀüÈ÷ º¹»çµÆ´Ù°í °¡Á¤Çϰí ÀÖ´Ù. ¸¸¾à ÄÄÆÄÀÏ·¯°¡ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î °¡º¯ ÀÎÀÚ ¸®½ºÆ®¸¦ °ü¸®ÇÑ´Ù¸é ÀÌ ÇÁ·Î±×·¥Àº ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù(Ç¥ÁØÀº °¡º¯ ÀÎÀÚ¸¦ °ü¸®ÇÏ´Â ±¸Ã¼ÀûÀÎ ¹æ¹ýÀ» °¢ ÄÄÆÄÀÏ·¯¿¡°Ô ¸Ã±â°í ÀÖ´Ù).
¡ß va_list : °¡º¯ ÀÎÀÚ Á¤º¸¸¦ ÀúÀåÇÒ ¼ö Àִ ƯÁ¤ ÀÚ·á ±¸Á¶¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÇü
¡ß va_start() : ±× ÀÚ·á ±¸Á¶ÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ ap°¡ ±× ¸Þ¸ð¸®¸¦ °¡¸®Å°µµ·Ï ÇÑ´Ù.
¡ß va_end() : ap°¡ °¡¸®Å°´Â ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù.
¡ß va_arg() : °¡º¯ ÀÎÀÚ¸¦ Çϳª °¡Á®¿À¸ç ap°¡ °¡¸®Å°´Â ÀÚ·á ±¸Á¶ÀÇ Æ¯Á¤ °ªÀ» º¯È½ÃŲ´Ù.
ÀÌ °æ¿ì aq´Â ap¿Í °°Àº ÀÚ·á ±¸Á¶¸¦ °¡¸®Å°°Ô µÇ°í, ÀÌ¹Ì ap¿Í ÇÔ²² va_arg()°¡ ¼öÇàµÇ±â¿¡ ap°¡ °¡¸®Å°´Â ÀÚ·á ±¸Á¶ÀÇ °ªÀÌ º¯ÈÇÒ ¶§ aq°¡ °¡¸®Å°´Â ÀÚ·á ±¸Á¶ÀÇ °ª ¿ª½Ã º¯ÇÏ°Ô µÈ´Ù. C99¿¡¼´Â °¡º¯ ÀÎÀÚ ¸®½ºÆ®¿¡ ´ëÇÑ Á¤º¸¸¦ Ç×»ó Àû¹ýÇÏ°Ô º¹»çÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇϱâ À§ÇØ va_copy() ¸ÅÅ©·Î¸¦ Ãß°¡·Î Á¦°øÇÏ°Ô µÆ´Ù. µû¶ó¼ ¾Õ¿¡¼ aq = ap;¶ó´Â ¼ö½ÄÀ» va_copy(aq, ap);·Î ´ëüÇÏ°í ¸¶Áö¸·¿¡ va_end(aq);¸¦ Ãß°¡Çϸé ÇØ´ç ¿¹Á¦´Â ¿Ã¹Ù¸¥ C99 ÇÁ·Î±×·¥ÀÌ µÈ´Ù.
´õ ¾ö°ÝÇØÁø ±¸Á¶Ã¼Çü ȣȯ ±ÔÄ¢[Lang][Open]
µÎ °³ÀÇ ºÐ¸®µÈ ¼Ò½º ÆÄÀÏ¿¡¼ ȣȯµÇ´Â ±¸Á¶Ã¼ÇüÀ» ±â¼úÇϰíÀÚ ÇÒ ¶§ º¸ÅëÀº ±¸Á¶Ã¼ ű×(tag)¸¦ µ¿ÀÏÇÏ°Ô ¸ÂÃçÁÖ°Ô µÈ´Ù. ÀÌ´Â ¸¹Àº C ¾ð¾î Ã¥ÀÌ ¿À·§µ¿¾È °Á¶Çؿ »ç½ÇÀ̱⿡ ´Ù¼öÀÇ ÇÁ·Î±×·¡¸Ó°¡ ÀÎÁöÇϰí ÀÖÁö¸¸ »ç½Ç À̰ÍÀÌ C99 ÀÌÀü±îÁö´Â C Ç¥ÁØÀÌ °¿äÇÏ´Â ±ÔÄ¢ÀÌ ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¾Ë°Ô µÈ´Ù¸é Á¶±Ý ÇãÅ»ÇÒÁöµµ ¸ð¸£°Ú´Ù. Áï ´ÙÀ½ÀÇ µÎ ¼Ò½º ÆÄÀÏ¿¡ ÀÖ´Â struct foo¿Í struct bar´Â (C90/C95¿¡¼´Â) ȣȯµÇ´Â µ¥ÀÌÅÍÇüÀÌ°í µÎ ¼Ò½º ÆÄÀÏ¿¡¼ º¯¼ö¸í obj´Â µ¿ÀÏÇÑ ´ë»óü(object)¸¦ ÀǹÌÇÑ´Ù.
ÇÏÁö¸¸ ¾ö¿¬È÷ ȣȯµÇ´Â µÎ ±¸Á¶Ã¼ÇüÀº ºñ·Ï ºÐ¸®µÈ ¼Ò½º ÆÄÀÏ¿¡¼ ¼±¾ðµÉ ¶§µµ °°Àº ű׸¦ °®´Â °ÍÀÌ ¹Ù¶÷Á÷Çϱ⿡ C99¿¡¼´Â űױîÁö µ¿ÀÏÇØ¾ß ÇÑ´Ù´Â ±ÔÄ¢À» Ãß°¡ÇÏ°Ô µÆ´Ù.
C90/C95¿Í C99 Â÷ÀÌ
Áß°£ Áß°£ ´Ù¼Ò ³À̵µ ÀÖ´Â À̾߱⵵ ÀÖ¾úÁö¸¸ °¡´ÉÇÑÇÑ °£·«Çϰí È¿À²ÀûÀ¸·Î C90/C95¿Í C99ÀÇ Â÷À̸¦ Àü´ÞÇÒ ¼ö ÀÖµµ·Ï ³ë·ÂÇß´Ù. ´ÙÀ½ È£¿¡¼µµ À¯»çÇÑ È帧À¸·Î ³ª¸ÓÁö ±â¼ú Áß ÁÖ¿äÇÑ °ÍµéÀ» »ìÆìº¸°í ³Ê¹« ¹æ´ëÇÑ ¼³¸íÀÌ ÇÊ¿äÇϰųª Áö³ªÄ¡°Ô »ç¼ÒÇÑ °ÍµéÀº Çϳª·Î ¹¾î ¼Ò°³Çϵµ·Ï ÇϰڴÙ. À̹ø ¿ø°í¿¡ ´ëÇÑ ¾î¶°ÇÑ ÁöÀûÀ̳ª Áú¹®, Àǰߵµ ȯ¿µÀÌ´Ù. ÇÊÀÚÀÇ ¸ÞÀÏÀ̳ª ȨÆäÀÌÁö °Ô½ÃÆÇÀ» ÅëÇØ ¾Ë·ÁÁÖ¸é ÀÚ¼¼ÇÑ ´äº¯À» µå¸± °ÍÀ» ¾à¼ÓÇÑ´Ù. @
| |
| ¿©±â¼ ¼Ò°³ÇÏ´Â C99 ±â¼úµéÀ» °ú¿¬ ¾î¶² ȯ°æ¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö ±Ã±ÝÇÑ µ¶ÀÚµéÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÇöÀç »ó¿ë ÄÄÆÄÀÏ·¯ ´Ù¼ö´Â C99 ±â¼úÀ» ¿Ïº®ÇÏ°Ô Áö¿øÇϰí ÀÖÀ¸³ª ¿ÀǼҽº ȯ°æ µî¿¡¼ »ç¿ëµÇ´Â °ø°³ ÄÄÆÄÀÏ·¯´Â Á¡Á¡ ´õ ³ª¾ÆÁö°í ÀÖ±â´Â ÇÏÁö¸¸ C99¸¦ ºÎºÐÀûÀ¸·Î¸¸ Áö¿øÇϰí ÀÖ´Â »óÅÂÀÌ´Ù. ±¸Ã¼ÀûÀÎ ÄÄÆÄÀÏ·¯¸¦ ¸î °¡Áö ¾ð±ÞÇØ º¸¸é ´ÙÀ½°ú °°´Ù.
¡ß Comeau C/C++ compiler + Dinkumware library(http://www.comeaucomputing.com, http://www.dinkumware.com)
Comeau»ç¿¡¼´Â ´Ù¾çÇÑ È¯°æ¿¡¼ C99¸¦ ¿Ïº®ÇÏ°Ô Áö¿øÇÏ´Â ÄÄÆÄÀÏ·¯¸¦, Dinkumware»ç¿¡¼´Â À¯»çÇÏ°Ô C99¸¦ ¿Ïº®ÇÏ°Ô Áö¿øÇϴ ǥÁØ ¶óÀ̺귯¸®¸¦ »ó´ëÀûÀ¸·Î Àú·ÅÇÑ °¡°Ý¿¡ Á¦°øÇϰí ÀÖ´Ù. ÀÌ µÑÀ» ÇÕÇØ »ç¿ëÇÏ¸é ¿ÂÀüÇÑ C99 ȯ°æÀ» ¾ò°Ô µÈ´Ù.
¡ß Intel C compiler(http://www.intel.com/software/products/compilers)
ÀÎÅÚ¿¡¼ ¸®´ª½º¿Í MS À©µµ¿ì ȯ°æÀ» À§ÇØ ÆÇ¸ÅÇϰí ÀÖ´Â icc ¿ª½Ã C99¸¦ Áö¿øÇϰí ÀÖ´Ù.
¡ß MIPSpro ANSI C Compiler(http://www.sgi.com/software/irix/tools/c.html)
SGI¿¡¼ ¹èÆ÷ÇÏ´Â IRIX¿ë ÄÄÆÄÀÏ·¯µµ C99¸¦ Áö¿øÇϰí ÀÖ´Ù.
¡ß GNU gcc(http://gcc.gnu.org)
C/C++ À̿ܿ¡µµ ´Ù¾çÇÑ ¾ð¾î¸¦ Áö¿øÇÏ´Â gcc ¿ª½Ã C99¸¦ ºÎºÐÀûÀ¸·Î Áö¿øÇϰí ÀÖ´Ù. gcc°¡ Áö¿øÇϰí ÀÖ´Â C99 ±â¼ú¿¡ ´ëÇÑ ³»¿ëÀº http://gcc.gnu.org/c99status.html¿¡¼ È®ÀÎÇÒ ¼ö ÀÖ´Ù(´Ù¸¥ ÄÄÆÄÀÏ·¯µµ ¸¶Âù°¡ÁöÁö¸¸). gcc¿¡¼ C99¸¦ ºÎºÐÀûÀ¸·Î¶óµµ Áö¿øÇϵµ·Ï ½ÇÇàÇϱâ À§Çؼ´Â -std=c99 °°Àº º°µµÀÇ ¿É¼ÇÀÌ ÇÊ¿äÇÏ´Ù.
¡ß lcc-win32(http://www.cs.virginia.edu/~lcc-win32)
Christopher Fraser¿Í David HansonÀÇ lcc¿¡ ±â¹ÝÀ» µÐ MS À©µµ¿ì¿ë ¹«·á C ÄÄÆÄÀÏ·¯ÀÎ lcc-win32 ¿ª½Ã ´Ù¼Ò ´õµðÁö¸¸ C99¸¦ ²ÙÁØÈ÷ Áö¿øÇذ¡°í ÀÖ´Ù. | | | | | |
| |