ÇÊÀÚ°¡ °¡Áö°í ÀÖ´Â °¡Àå ¿À·¡µÈ C ¾ð¾î Ã¥Àº 1970³â´ë¿¡ ÃâÆÇµÈ °ÍÀÌ´Ù. Áö±ÝÀº ÀÚ¹Ù³ª ÆÄÀ̽㠰°Àº °·ÂÇÑ ±â´ÉÀÇ ÁÁÀº ¾ð¾îµéÀÌ ½ñ¾ÆÁ® ³ª¿Í Áö³ªÄ¡°Ô ±¤¹üÀ§ÇÑ ºÐ¾ß¿¡¼ »ç¿ëµÇ¾î¿Â C ¾ð¾î°¡ ÀÚ¸®¸¦ ³»¾îÁÖ°í ÀÖÁö¸¸, Áö±Ý±îÁöµµ °»êÀÌ 3¹ø º¯Çϱâ Àü¿¡ ź»ýÇÑ ¾ð¾î°¡ °¢Á¾ °³¹ß¿¡¼ °¡Àå ºó¹øÇÏ°Ô ¾²ÀÌ´Â ¾ð¾î·Î ÀÚ¸®¸¦ Áö۰í ÀÖ´Ù´Â »ç½ÇÀÌ Á¶±ÝÀº ºÎÁ¶¸®ÇØ º¸ÀÏ ¼öµµ ÀÖ´Ù.
ÇÏÁö¸¸ ÀÌ ±ÛÀÇ Á¦¸ñ¿¡¼µµ ¾Ë ¼ö ÀÖµíÀÌ ÀÌ´Â ±â¿ìÀÏ »ÓÀÌ´Ù. ¿ì¸®¿¡°Ô ±× »ç½ÇÀÌ Àß ¾Ë·ÁÁöÁö ¾ÊÀ» »Ó Áö±Ý ÀÌ ¼ø°£¿¡µµ C ¾ð¾î´Â Ãֽбâ¼úµé°ú ºü¸£°Ô º¯ÈÇÏ´Â ÁÖº¯ ȯ°æ¿¡ ÀûÀÀÇϱâ À§ÇØ ÁøÈ¸¦ °ÅµìÇϰí ÀÖ´Ù. ÀÌ ±Û¿¡¼´Â °¡Àå ÃÖ±Ù¿¡ C ¾ð¾î¿¡ ÀÏ¾î³ Ä¿´Ù¶õ ÁøÈ¿¡ ´ëÇØ »ìÆìº¸·Á ÇÑ´Ù. ±¸Ã¼ÀûÀÎ À̾߱⸦ ½ÃÀÛÇϱâ Àü¿¡ ´õ¿í ½±°Ô ÀÌÇØÇϱâ À§ÇÑ ¸î °¡Áö ±âº»ÀûÀÎ »ç½ÇµéÀ» ¾Ë¾Æº¸ÀÚ. Áö±ÝºÎÅÍ Àá½Ã µ¿¾È ´Ù·ç´Â À̾߱⿡ ³Ê¹«³ªµµ Àͼ÷ÇÑ µ¶ÀÚ¶ó¸é ¿øÇÏ´Â À̾߱Ⱑ ³ª¿Ã ¶§±îÁö °¡»ÓÇÏ°Ô °Ç³Ê¶Ù¾îµµ ÁÁ´Ù.
C ¾ð¾î Ç¥ÁØÈÀÇ ¿ª»ç
À¯´Ð½º¶ó´Â Áö±ÝÀº ³Ê¹«³ªµµ À¯¸íÇÑ ¿î¿µÃ¼Á¦¸¦ ±¸ÇöÇϱâ À§ÇØ C ¾ð¾î°¡ óÀ½ ¸¸µé¾îÁø °ÍÀº 1970³â´ë ÃÊ. Áö±ÝÀ¸·ÎºÎÅÍ 30³â ÀüÀÇ ÀÏÀÌ´Ù. ±× ÀÌÈÄ C ¾ð¾î´Â â½ÃÀÚÀÎ Dennis Ritchie°¡ óÀ½ »ý°¢Çß´ø °Íº¸´Ù ´õ ´Ù¾çÇÑ ºÐ¾ß¿¡¼ ´Ù¾çÇÑ »ç¶÷µé¿¡ ÀÇÇØ »ç¿ëµÇ°í ¶Ç ¹ßÀüÇß´Ù. ¹°·Ð ¼·Î ´Ù¸¥ Áý´Ü¿¡ ÀÇÇØ º¯ÇüµÈ C ¾ð¾î°¡ ¿ì¿¬ ȤÀº ÇÊ¿¬¿¡ ÀÇÇØ ¾î´À Á¤µµ °°Àº ÇüŸ¦ °øÀ¯ÇÑ´Ù°í ÇØµµ 1980³â´ë¿¡ µé¾î¼¸é¼ °¢ C ¾ð¾îÀÇ ¹æ¾ðµéÀÌ ÀÚ¶ûÇÏ´Â ´Ù¾çÇÑ È®Àå ±â¼úÀº ¼·Î ȣȯµÇÁö ¾Ê±â¿¡ ÃæºÐÇß´Ù.
°áÁ¤ÀûÀ¸·Î C ¾ð¾î°¡ ¹Ì±¹ Á¤ºÎ ÇÁ·ÎÁ§Æ®¸¦ À§ÇØ »ç¿ëµÇ±â ½ÃÀÛÇÏ¸é¼ ¹Ì±¹ÀÇ Ç¥ÁØÈ ±â±¸ÀÎ ANSI¿¡ ÀÇÇØ C ¾ð¾îÀÇ Ç¥ÁØÈ°¡ ½ÃÀ۵ȴÙ. À̰ÍÀÌ 1980³â´ë ÃʹÝÀÇ ÀÏÀÌ´Ù. ÀÌÈÄ 5³â ÀÌ»óÀÇ Ç¥ÁØÈ °úÁ¤À» °ÅÃÄ Åº»ýÇÑ C ¾ð¾î Ç¥ÁØÀÌ Áö±Ýµµ ¿©·¯ C ¾ð¾î ¼Àû¿¡¼ ³Êµµ³ªµµ ÀοëÇÏ´Â ANSI C(Á¤È®È÷´Â ANSI X3.159-1989)ÀÌ´Ù. ÀÌ ÃÖÃÊÀÇ C ¾ð¾î Ç¥ÁØÀÌ 1989³â¿¡ ¹ßÇ¥µÆ±â¿¡ À̸¦ ºñ°ø½ÄÀûÀ¸·Î C89¶ó°í ºÎ¸£±âµµ ÇÑ´Ù. ´ç½Ã C ¾ð¾î°¡ ºñ´Ü ¹Ì±¹¿¡¼¸¸ Á¦ÇÑÀûÀ¸·Î »ç¿ëµÇ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ¾Æ´Ï¾ú±â¿¡ ±¹Á¦ Ç¥ÁØÈ ±â±¸ÀÎ ISO´Â ANSIÀÇ Ç¥ÁØÈ °úÁ¤À» °¨µ¶Çß°í, ¸î °¡Áö Çü½ÄÀûÀÎ ºÎºÐ¸¸À» ¹Ù²ã 1990³â ¸í½Ç»óºÎÇÑ ±¹Á¦ Ç¥ÁØÀÎ ISO Ç¥ÁØ(ISO 9899:1990)À» ¹ßÇ¥ÇÑ´Ù. À¯»çÇÏ°Ô À̸¦ C90À̶ó°í ºÎ¸¥´Ù.
C89¿Í C90Àº º»ÁúÀûÀ¸·Î °°Àº ³»¿ëÀ» Àü´ÞÇϱ⿡ Ưº°È÷ ANSI¿Í ISO¸¦ ±¸ºÐÇÏÁö ¾Ê´Â ÀÌ»ó ¼·Î È¥¿ëµÇ´Â Ç¥ÇöÀÌ´Ù. C90ÀÌ ¹ßÇ¥µÇ¸é¼ C ¾ð¾îÀÇ Ç¥ÁØÈ °úÁ¤Àº °ø½ÄÀûÀ¸·Î ISO(ISO JTC1/SC22/WG14)·Î À̾çµÈ´Ù(¹°·Ð ANSI´Â ISOÀÇ ¹Ì±¹ ´ëÇ¥À̱⿡ ¿µ±¹À» Æ÷ÇÔÇÑ À¯·´, ÀϺ» µî°ú ÇÔ²² °è¼Ó Ç¥ÁØÈ °úÁ¤¿¡ Âü¿©ÇÏ°Ô µÈ´Ù). µû¶ó¼ Ç¥ÁØÈµÈ C ¾ð¾î¸¦ ºÎ¸£´Â Á» ´õ ¿Ã¹Ù¸¥ ȣĪÀº ANSI C°¡ ¾Æ´Ñ ISO C³ª Ç¥ÁØ C¶ó°í ÇÒ ¼ö ÀÖ´Ù.
ISO¿¡ ÀÇÇØ °ü¸®µÇ´Â ¸ðµç ±¹Á¦ Ç¥ÁØÀº ÁÖ±âÀûÀ¸·Î Àç°ËÅäµÇ°í °³Á¤µÈ´Ù. ÀÌÈÄ À¯·´À» Áß½ÉÀ¸·Î ÅÍÁ® ³ª¿Â ¡®C90ÀÌ Áö³ªÄ¡°Ô ¹Ì±¹Àû¡¯À̶ó´Â ºÒ¸¸À» ÀáÀç¿ì±â À§ÇØ 1995³â ÀÏÁ¾ÀÇ ºÎ·Ï ÇüÅ·ΠC90ÀÇ È®ÀåÀÌ ¹ßÇ¥µÈ´Ù. À̸¦ Amendment 1(ÁÙ¿©¼ AMD1)À̶ó°í ºÎ¸£¸ç, C90°ú AMD1À» ÇÕÇØ C95¶ó°í ºÎ¸£±âµµ ÇÑ´Ù. C90 ȤÀº C95°¡ ÀÚ¸®¸¦ Àâ¾Æ°¡´Â µ¿¾È ÀÏ¾î³ ´Ù¾çÇÑ º¯È(¿¹¸¦ µé¸é C++¿Í À¯´Ï ÄÚµåÀÇ ¹ßÀü)¸¦ ¼ö¿ëÇϱâ À§ÇØ 90³â´ë Áß¹Ý Ç¥ÁØÈ À§¿øÈ¸´Â C Ç¥ÁØÀÇ ´ë´ëÀûÀΠù ¹øÂ° °³Á¤ ÀÛ¾÷¿¡ Âø¼öÇϰí 1999³â 12¿ù¿¡ Áö±Ý ÀÌ ¼ø°£ °ø½ÄÀûÀÎ ±¹Á¦ Ç¥ÁØÀ¸·Î ¿µÇâ·ÂÀ» °®´Â C99(ISO 9899:1999)¸¦ ¹ßÇ¥ÇÏ°Ô µÈ´Ù. ÀÌ 20³â µ¿¾ÈÀÇ º¹Àâ´Ù´ÜÇÑ »ç°ÇÀ» ÁÙÀ̰í ÁÙ¿© ´Ü¼øÇÏ°Ô Ç¥ÇöÇϸé <±×¸² 1>°ú °°´Ù.
 |
| <±×¸² 1> C ¾ð¾î Ç¥ÁØÈÀÇ ¿ª»ç |
Ç¥ÁØÀÌ ¹ßÇ¥µÈ ÀÌÈÄ ÃÖ¼ÒÇÑ ¼ö³âÀº Èê·¯¾ß Ç¥ÁØÀÌ ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼ ¿µÇâ·ÂÀ» ¹ßÈÖÇÏ´Â °ÍÀÌ º¸ÅëÀ̱⿡ C99°¡ ºñ·Ï 5³â Àü¿¡ ¹ßÇ¥µÈ Ç¥ÁØÀÌÁö¸¸, ¾ÆÁ÷µµ ´ëºÎºÐÀÇ °³¹ß ȯ°æÀº C99¸¦ ºÎºÐÀûÀ¸·Î¸¸ Áö¿øÇϰí ÀÖÀ¸¸ç ´Ù¼öÀÇ C ¾ð¾î ¼ÀûÀº C90À̳ª C95¿¡ ±× »Ñ¸®¸¦ µÎ°í ÀÖ´Ù. ÀϺΠ»ó¿ë ÄÄÆÄÀÏ·¯¸¸ C99¸¦ ¿Ïº®È÷ Áö¿øÇÏ´Â °ÍÀÌ Çö½ÇÀÌÁö¸¸ C99¿¡¼ µµÀÔµÈ »õ·Î¿î ±â¼úµéÀÌ ±× Æí¸®¼º°ú È¿À²¼ºÀ¸·Î ÀÎÇØ ÀÌ¹Ì ¸¹Àº ÄÄÆÄÀÏ·¯¿¡¼ È®ÀåÀ¸·Î Á¦°øµÇ´ø °ÍµéÀ̱⿡ »õ·Î¿î ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§ ÀÌ ½Å±â¼úÀ» Àû±ØÀûÀ¸·Î Ȱ¿ëÇÏ´Â °ÍÀº ±»ÀÌ »óÀ§ ȣȯ¼º(forward compatibility)À» °í·ÁÇÏÁö ¾Ê¾Æµµ ÃæºÐÈ÷ °¡Ä¡ ÀÖ´Â ÀÏÀ̶ó°í º¼ ¼ö ÀÖ´Ù.
| |
|
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¸¦ ÂüÁ¶ÇÏ¸é¼ Á¶±ÝÀ̳ª¸¶ ÇØ°áµÉ °ÍÀ¸·Î ±â´ëÇÑ´Ù.
| | | | | |
| |
C99ÀÇ »õ ±â¼úµé
ÀÌÁ¦ºÎÅÍ ºÎÁ·ÇϰԳª¸¶ ´ÙÁ®µÐ ±â¹Ý Áö½ÄÀ» ¹ÙÅÁÀ¸·Î C99ÀÇ »õ·Î¿î ±â¼úµéÀ» Â÷·Ê·Î »ìÆìº¸µµ·Ï ÇÏÀÚ. »ç½Ç C90 Ç¥Áذú C99 Ç¥ÁØÀ» ÆîÃijõ°í ÇÑ ÁÙ¾¿ ´ëÁ¶Çذ¡¸ç Â÷ÀÌÁ¡À» ã¾Æº¸¸é »ó´çÈ÷ ¹æ´ëÇÑ ¾çÀÇ Â÷À̸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡ À¯È¿ÇÑ ¿µÇâÀ» ¹ÌÄ¡´Â º¯È´Â C99 Ç¥ÁØÀÇ ¸Ó¸®¸»(foreword)¿¡¼ ³ª¿Çϰí ÀÖ´Â 50¿©°³·Î Á¤¸®µÉ ¼ö ÀÖ´Ù. ±× Áß ÀϺΠ±â¼úÀº ºÎµ¿¼Ò¼ö ¿¬»ê°ú IEEE 754 Ç¥Áذú °ü·ÃµÈ °í±Þ ±â¼ú¿¡ ´ëÇÑ ±íÀÌ ÀÖ´Â ÀÌÇØ¸¦ ¿ä±¸Çϱ⿡ ÀÌ ¿¬Àç¿¡¼µµ °Ü¿ì ¼Ò°³¸¸ ÇÒ °èȹÀÌ´Ù. ±âº»ÀûÀ¸·Î Á¦ÇÑµÈ Áö¸é¿¡¼ ´Ù·ê ±â¼úµéÀº Å©°Ô ´ÙÀ½°ú °°Àº ±âÁØ¿¡ µû¸¥´Ù.
¡ß °ú°Å Ç¥ÁØ(C90À̳ª C95)ÀÇ ´ÜÁ¡À» º¸¿ÏÇϱâ À§ÇØ µµÀÔµÈ »õ ±â¼úÀº ±× ±â¼úÀÇ µµÀÔ ¹è°æÀ» Áß½ÉÀ¸·Î ¼³¸íÇÑ´Ù.
¡ß C++¿¡¼ ÀÌ¹Ì Áö¿øÇϰí ÀÖ´Â ±â¼úÀº C ¾ð¾î¿¡¼ÀÇ ¸î °¡Áö Ư¡°ú ÁÖÀÇ»çÇ׸¸À» ¼Ò°³ÇÑ´Ù.
¡ß ÇöÀç ´Ù¼öÀÇ ÄÄÆÄÀÏ·¯°¡ Áö¿øÇϰí ÀÖ°í, ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼ ¸Å¿ì À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ´Â ±â¼úÀº ºñ±³Àû ±¸Ã¼ÀûÀ¸·Î ¼³¸íÇÑ´Ù.
¡ß °¡±ÞÀû °¢ ±â¼úÀÇ ±¸Ã¼ÀûÀÎ ¸ð½ÀÀ» È®ÀÎÇÒ ¼ö ÀÖ´Â ¿¹¸¦ º¸ÀδÙ.
ÀÌ ±ÛÀ» º¸¸é¼ °¡Àå À¯ÀÇÇØ¾ß ÇÒ »çÇ×Àº ÀÌ ±ÛÀÌ C99ÀÇ »õ ±â¼ú¿¡ ´ëÇÑ ¿Ïº®ÇÑ ¼³¸íÀ» Á¦°øÇÏÁö´Â ¾Ê´Â´Ù´Â »ç½ÇÀÌ´Ù. ÀÌ ±ÛÀÇ ÁÖ¿äÇÑ ¸ñÀûÀº C99°¡ ´ëÃæ ¾î¶°ÇÑ ¸ð½ÀÀ» °¡Áö°í ÀÖ´ÂÁö, C ¾ð¾î°¡ ¾î¶°ÇÑ ¸ð½ÀÀ¸·Î º¯Çذ¡°í ÀÖ´ÂÁö ¤À» ¼ö ÀÖ´Â Å« È帧¸¸À» º¸À̰íÀÚ ÇÏ´Â °ÍÀÌ´Ù. Áö±ÝºÎÅÍ ¼Ò°³ÇÏ´Â ±â¼úÀÇ Á¦¸ñ ¿·¿¡ ºÙÀº Ç¥½Ã´Â ´ÙÀ½°ú °°Àº Àǹ̷Π¾²¿´´Ù.
¡ß Lang : C Ç¥ÁØÀº Å©°Ô ¾ð¾î ºÎºÐ°ú ¶óÀ̺귯¸® ºÎºÐÀ¸·Î ±¸ºÐµÇ¾î ÀÖ´Ù. ½ÇÁ¦ C ¾ð¾îÀÇ ±¸ÇöüÀÎ ÄÄÆÄÀÏ·¯¿Í ¶óÀ̺귯¸®´Â ¼·Î ¹ÐÁ¢ÇÏ°Ô °ü·ÃµÇ¾î Ä®·Î ÀÚ¸£µíÀÌ ³ª´©±â ¾î·Á¿î °æ¿ì(¿¹¸¦ µé¾î ƯÁ¤ ¶óÀ̺귯¸® ÇÔ¼ö È£Ãâ¿¡ ´ëÇØ ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈµÈ Äڵ带 »ðÀÔÇØ Áְųª ƯÁ¤ ¶óÀ̺귯¸® ÇÔ¼ö°¡ ÄÄÆÄÀÏ·¯¿¡¼ Á¦°øµÇ´Â ƯÁ¤ ±â¼úÀ» »ç¿ëÇØ¾ß¸¸ ÇÏ´Â °æ¿ì µî)°¡ ¸¹Áö¸¸, Ç¥ÁØÀº ¾ð¾î¸¦ Ãß»óÀûÀÎ °üÁ¡¿¡¼ ±â¼úÇϰí Àֱ⿡ ¾ð¾î¿Í ¶óÀ̺귯¸®¸¦ ¸íÈ®È÷ ³ª´©°í ÀÖ´Ù. ±× Áß ¾ð¾î ºÎºÐ¿¡ Ãß°¡µÈ º¯ÈÀÏ °æ¿ì ÀÌ¿Í °°Àº Ç¥½Ã°¡ ºÙ´Â´Ù.
¡ß Lib : C Ç¥ÁØÀÇ ¶óÀ̺귯¸® ºÎºÐ¿¡¼ ÀÏ¾î³ º¯ÈÀÏ °æ¿ì¿¡ ºÙ´Â´Ù.
¡ß C++ : C++¸¦ ÅëÇØ ÀÌ¹Ì À¯¸íÇØÁø ±â¼úÀÏ °æ¿ì ºÙ´Â´Ù. ´Ù¸¸ C¿Í C++¿¡¼ Á¦°øµÇ´Â ±â¼úÀÌ Á¤È®È÷ µ¿ÀÏÇÑ Àǹ̸¦ °®´Â °ÍÀº ¾Æ´ÔÀ» À¯ÀÇÇϱ⠹ٶõ´Ù. ¿Ü¾çÀº µ¿ÀÏÇØµµ ¼¼ºÎÀûÀ¸·Î´Â ´Ù¼Ò ´Ù¸¥ ÇൿÀ» °®±âµµ ÇÑ´Ù.
¡ß Open : ¸®´ª½º³ª BSD °°Àº ¿ÀǼҽº ȯ°æ¿¡¼ Á¦°øµÇ´Â ÄÄÆÄÀÏ·¯¿¡¼ Á÷Á¢ ȤÀº À¯»çÇÑ ÇüÅ·ΠÀÌ¹Ì Á¦°øµÇ´Â ±â¼úÀÏ °æ¿ì¿¡ ºÙ´Â´Ù. ¹°·Ð ½Ã°£ÀÌ Áö³ª °ÅÀÇ ¸ðµç ȯ°æ¿¡¼ C99°¡ ¿Ïº®ÇÏ°Ô Áö¿øµÈ´Ù¸é ÀÌ Ç¥½Ã´Â ¹«ÀǹÌÇØÁú °ÍÀÌ´Ù.
ÀÌÁßÀÚ¿Í ¸¦ ÅëÇÑ Á¦ÇÑµÈ ¹®Àڼ Áö¿ø[Lang][Lib][Open]
ÀÌ ±â¼úÀº »ç½Ç C99°¡ ¾Æ´Ñ AMD1¿¡¼ Ãß°¡µÈ ±â¼úÀÌ´Ù. AMD1´Â C90¿¡ ºÙ´Â ºÎ·Ï ÇüÅ·Π¹ßÇ¥µÈ ¹Ý¸é, C99°¡ »ç½Ç»ó C90ÀÇ Ã¹ ¹øÂ° °³Á¤À̱⿡ AMD1¿¡ Ãß°¡µÈ ÁÖ¿äÇÑ ±â¼úÀÌ C99¿¡µµ ³ª¿µÈ ¼ÀÀÌ´Ù. Ãʱâ C ¾ð¾î°¡ ±â¹ÝÀ¸·Î µÐ ¹®ÀÚ¼ÂÀº ¿ì¸®¿¡°Ô ³Ê¹« Àͼ÷ÇÑ 7ºñÆ® ¹®ÀÚ¼ÂÀÎ ASCIIÀÌ´Ù(°ø½ÄÀûÀÎ ASCII´Â 7ºñÆ® ¹®ÀÚ¼ÂÀÌ´Ù. ¿ì¸®°¡ ÈçÈ÷ ¾Ë°í ÀÖ´Â 8ºñÆ® ¹®ÀÚ¼ÂÀº ASCIIÀÇ È®Àå ¹öÀüÀ¸·Î º¸Åë ASCII-8À̶ó°í ºÎ¸£¸ç, ÀÌ °æ¿ì ÄÚµå ¹øÈ£ 128¹ø ÀÌÈÄÀÇ ¹®ÀÚ¿¡ ´ëÇÑ À̽ļºÀº º¸ÀåµÇÁö ¾Ê´Â´Ù).
ÇÏÁö¸¸ Àü ¼¼°è ¸ðµç ȯ°æ¿¡¼ ASCIIÀÇ 128°³ ¹®ÀÚ°¡ °°Àº ÀǹÌ, °°Àº ¸ð¾çÀ¸·Î ¾²ÀÌÁö ¾Ê±â¿¡ ±¹Á¦ÀûÀΠȯ°æÀ» ÁöÇâÇÏ´Â C Ç¥ÁØÀº ASCII¸¦ ¾ð¾îÀÇ ±â¹Ý ¹®ÀÚ¼ÂÀ¸·Î µµÀÔÇÒ ¼ö ¾ø¾ú´Ù. µû¶ó¼ ¿©·¯ ³ª¶ó¿¡¼ º¯ÇüµÇ¾î »ç¿ëµÇ´Â ASCIIÀÇ °øÅë ºÎºÐ(ASCIIÀÇ ºÎºÐ ÁýÇÕ)¸¸À» ¹Àº ISO 646 Invariant SetÀ» ¾ð¾îÀÇ ±â¹Ý ¹®ÀÚ¼ÂÀ¸·Î »ï¾ÒÀ¸¸ç, ÀÌ·Î ÀÎÇØ ÀûÀýÇÏ°Ô Ç¥ÇöÇÒ ¼ö ¾ø´Â 9°³ ¹®ÀÚ¸¦ ISO 646 Invariant Set ³»ÀÇ ¹®ÀÚµé·Î Ç¥ÇöÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ C90¿¡¼ ƯÀÌÇÑ ÇüÅÂÀÇ »ïÁßÀÚ(trigraph)¸¦ µµÀÔÇÏ°Ô µÈ´Ù. <¸®½ºÆ® 1>Àº ÀÌ·± »ïÁßÀÚ¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¥À» º¸¿©ÁÖ°í ÀÖ´Ù.
¸¹Àº °³¹ß ȯ°æÀÌ ³Î¸® ¾²ÀÌÁö ¾Ê´Â »ïÁßÀÚ¸¦ ±âº»ÀûÀ¸·Î ÀνÄÇÏÁö ¾Ê±â¿¡ º°µµÀÇ ¿É¼Ç(gccÀÇ °æ¿ì -ansi -pedantic)À» ÁÖ¾î¾ß ¿Ã¹Ù¸£°Ô ¹ø¿ªµÇÁö¸¸, ÀÌ ÀÌ»óÇÑ ¸ð¾çÀÇ ÇÁ·Î±×·¥ÀÌ ºÐ¸í Ç¥ÁØÀ» µû¸£´Â ¿Ã¹Ù¸¥ ÇÁ·Î±×·¥ÀÓ¿¡ À¯ÀÇÇÏÀÚ.
| <¸®½ºÆ® 1> »ïÁßÀÚ(¹ØÁ٠ģ ºÎºÐ)¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¥ | | | |
??=include
int main(void)
??<
printf(Hello, world??-??/n);
printf(What??!);
return 0;
??> | |
 |
ÇÏÁö¸¸ ÀÌ »ïÁßÀÚ´Â ¸ð¾ç ÀÚüµµ ÇÁ·Î±×·¥ÀÇ °¡µ¶¼º(readability)À» ½ÉÇÏ°Ô ¶³¾î¶ß¸± Á¤µµ·Î ÈäÇÒ »Ó´õ·¯ ÄÄÆÄÀÏ·¯°¡ ÇÁ·Î±×·¥À» ÀνÄÇÏ´Â °¡Àå Ãʱ⠴ܰ迡 ¸¶Ä¡ ¿öµåÇÁ·Î¼¼¼ÀÇ ¹Ù²Ù±â ±â´Éó·³ ¹«½ÄÇÏ°Ô Ã³¸®µÇ±â ¶§¹®¿¡(½ÉÁö¾î ¹®ÀÚ¿ »ó¼ö ¾È¿¡¼ÀÇ »ïÁßÀÚµµ ġȯµÈ´Ù) Á¤ÀÛ À̸¦ ÇÊ¿ä·Î ÇÏ´Â °÷¿¡¼Á¶Â÷ ¿Ü¸é¹Þ°Ô µÆ´Ù. ÀÌ·¸°Ô À¯·´ ÀϺΠ±¹°¡¸¦ Áß½ÉÀ¸·Î »ïÁßÀÚ¿¡ ´ëÇÑ ºÒ¸¸ÀÌ ³ªÅ¸³ªÀÚ ºó¹øÇÏ°Ô »ç¿ëµÇ´Â »ïÁßÀÚ ÀϺθ¦ ´ëüÇϱâ À§ÇØ »õ·Î Ãß°¡µÈ °ÍÀÌ 6°³ÀÇ ÀÌÁßÀÚ(digraph)´Ù. ÀÌÁßÀÚ´Â ±× ÇൿÀÌ ¾ð¾î¸¦ ±¸¼ºÇÏ´Â ´Ù¸¥ ÅäÅ«(token)µé°ú °°´Ù´Â ÀåÁ¡À» °®°í <¸®½ºÆ® 2>¿¡¼ º¼ ¼ö ÀÖµíÀÌ ¿Ü°üµµ »ó´ëÀûÀ¸·Î ¼ö·ÁÇÏ´Ù.
| <¸®½ºÆ® 2> ÀÌÁßÀÚ(¹ØÁ٠ģ ºÎºÐ)¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¥ | | | |
%:include
int main(void)
%<
printf(Hello, world??-??/n);
return 0;
%> | |
 |
¶ÇÇÑ ASCII¸¦ Á¦´ë·Î Áö¿øÇÏÁö ¸øÇϴ ȯ°æ¿¡¼µµ °¡µ¶¼º ³ôÀº ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï ¾Æ·¡ ¿¹¿¡¼ º¼ ¼ö ÀÖµíÀÌ »ïÁßÀÚ³ª ÀÌÁßÀÚ¸¦ ÅëÇØ ±â¼úµÇ´Â ¿¬»êÀÚµéÀ» ¸ÅÅ©·Î(¿¹¸¦ µé¸é &&¸¦ À§ÇÑ and, ||¸¦ À§ÇÑ or, ~¸¦ À§ÇÑ compl)·Î Á¦°øÇÏ´Â
°¡ Ãß°¡·Î Áö¿øµÈ´Ù.
%:include
// ...
if (isspace(uc) or isalpha(uc))
flag = compl flag;
´ÙÇེ·´°Ôµµ ¿ì¸®³ª¶óÀÇ ´ë´Ù¼ö ±âº» ÇÁ·Î±×·¡¹Ö ȯ°æÀº ASCIIÀÇ 128°³ ¹®ÀÚ¸¦ Á¦´ë·Î Á¦°øÇϰí Àֱ⿡ »ïÁßÀÚ³ª ÀÌÁßÀÚ È¤Àº ¿Í´Â °Å¸®°¡ ¸Ö´Ù. ´Ù¸¸ Á¾Á¾ »ïÁßÀÚ³ª ÀÌÁßÀÚÀÇ Á¸À縦 ¸ð¸£´Â »óÅ¿¡¼ ±×¿Í À¯»çÇÑ ÇüÅÂÀÇ Æ¯¼ö ¹®ÀÚ¸¦ ÇÁ·Î±×·¥ ³»¿¡ »ç¿ëÇß´Ù°¡ ÀÌÇØÇÒ ¼ö ¾ø´Â °æ°í ¸Þ½ÃÁö·Î °í¹ÎÇÏ´Â °æ¿ì°¡ Àֱ⿡ ±× Á¸À縸ÅÀº ±â¾ïÇØ µÑ Çʿ䰡 ÀÖ´Ù.
À¯È¿ µ¥ÀÌÅÍÇüÀ» ÅëÇØ ÀÚ¼¼ÇØÁø ¿¡Àϸ®¾î¡ ±ÔÄ¢[Lang][Open]
C ¾ð¾î¿¡¼ ¿¡Àϸ®¾î¡(aliasing)À̶õ ¸Þ¸ð¸®¿¡ Á¸ÀçÇÏ´Â ÇϳªÀÇ ´ë»óü(object)¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â °æ·Î°¡ ´Ù¾çÇÔÀ» ÀǹÌÇÑ´Ù. ÀÌ´Â º¸Åë °ø¿ëü¿Í Æ÷ÀÎÅ͸¦ ÅëÇØ ÀϾÙ. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥¿¡¼´Â ´ë»óü¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â 2°¡Áö ¹æ¹ý(object¸¦ ÅëÇÑ ¹æ¹ý, À̸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ pi¸¦ ÅëÇÑ ¹æ¹ý)ÀÌ Á¸ÀçÇÑ´Ù.
#include
int main(void)
{
int object = 7903, *pi = &object;
printf(%d, %d\n, object, *pi);
return 0;
}
Áß¿äÇÑ °ÍÀº C ¾ð¾î°¡ ¸ðµç °¡´ÉÇÑ ¿¡Àϸ®¾î¡À» Çã¶ôÇØ ÁÖÁö´Â ¾Ê´Â´Ù´Â »ç½ÇÀÌ´Ù. Æ÷ÀÎÅÍÀÇ Á¤·Ä Á¦ÇÑ(alignment restriction) ¹®Á¦´Â Â÷Ä¡Çϰí¶óµµ Ç¥ÁØÀÌ ¿¡Àϸ®¾î¡À» »ó´çÈ÷ Á¦ÇÑÇÏ´Â Å« ÀÌÀ¯ Áß Çϳª´Â ¹Ù·Î ÃÖÀûÈ¿Í °ü·ÃµÇ¾î ÀÖ´Ù.
| <¸®½ºÆ® 3> ¿¡Àϸ®¾î¡°ú ÃÖÀûÈ(1) | | | |
void func(int *pi, float *pf)
{
*pf = 2.0;
*pi = 3;
another_func(*pf); // another_func(2.0); À¸·Î ÃÖÀûÈ °¡´É?
} | |
 |
<¸®½ºÆ® 3>¿¡¼ ÁÖ¼®ÀÌ ¼³¸íÇÑ´ë·Î another_func()¿¡ ´ëÇÑ È£ÃâÀ» ÃÖÀûÈÇÒ ¼ö ÀÖÀ»±î? ¸¸¾à ´ÙÀ½°ú °°Àº ÇÔ¼ö È£ÃâÀÌ Çã¿ëµÇ´Â °ÍÀ̶ó´Â ÁÖ¼®¿¡¼ º¸ÀÎ ÃÖÀûÈ´Â Çã¶ôµÇ¾î¼´Â ¾È µÉ °ÍÀÌ´Ù.
int i;
func(&i, (float *)&i); // wrong
ÇÏÁö¸¸ ½ÇÁúÀûÀ¸·Î Áö¿øÇÒ °¡Ä¡°¡ º°·Î ¾ø´Â ¿¡Àϸ®¾î¡À» À§ÇØ È¿À²ÀûÀÎ ÃÖÀûȸ¦ °úµµÇÏ°Ô ¸·´Â °ÍÀº ¾ð¾îÀÇ ¼º´É ¸é¿¡¼ °áÄÚ ¹Ù¶÷Á÷ÇÏÁö ¾Ê±â¿¡ Ç¥ÁØÀº floatÇü ´ë»óü¸¦ intÇüÀ¸·Î ¿¡Àϸ®¾î¡ÇÏ´Â °ÍÀ» Çã¶ôÇÏÁö ¾Ê´Â´Ù. °á°úÀûÀ¸·Î ÁÖ¼®¿¡¼ º¸ÀÎ ÃÖÀûÈ´Â Ç×»ó Çã¶ôµÈ´Ù. Áï Æ÷ÀÎÅÍÀÇ Á¤·Ä Á¦ÇÑ ¹®Á¦°¡ ¾ø´Ù°í ÇØµµ ¾Õ¿¡¼ º¸ÀÎ °Í °°ÀÌ func()¸¦ È£ÃâÇØ ºÒ¹ýÀûÀÎ ¿¡Àϸ®¾î¡À» ½ÃµµÇÏ´Â ÇÁ·Î±×·¥Àº ÃÖÀûÈ·Î ÀÎÇØ ÀüÇô ¾û¶×ÇÑ °á°ú¸¦ ¾òÀ» ¼öµµ ÀÖ´Ù. ¹°·Ð ¸ðµç ¿¡Àϸ®¾î¡ÀÌ ±ÝÁöµÇ¾î ¸¶¶¥ÇÑ °ÍÀº ¾Æ´Ï´Ù.
| <¸®½ºÆ® 4> ¿¡Àϸ®¾î¡°ú ÃÖÀûÈ(2) | | | |
void func(int *pi, unsigned int *pui)
{
*pui = 2;
*pi = 3;
another_func(*pui);
} | |
 |
¿¹¸¦ µé¾î <¸®½ºÆ® 4>¿Í °°Àº ÇÔ¼ö func()°¡ ÁÖ¾îÁ³À» ¶§, ´ÙÀ½°ú °°Àº ¹«ºÎÈ£/À¯ºÎÈ£ Á¤¼öÇü »çÀÌÀÇ ¿¡Àϸ®¾î¡Àº ÃæºÐÈ÷ Çã¶ôÇÒ °¡Ä¡°¡ ÀÖ´Ù. À̴ ǥÁØÀÌ ¹«ºÎÈ£/À¯ºÎÈ£ Á¤¼öÇüÀÇ ³»ºÎ Ç¥ÇöÀÇ ÇüŸ¦ ¾î´À Á¤µµ º¸ÀåÇϱ⿡ ¿¡Àϸ®¾î¡À» ÅëÇØ ÀÇ¹Ì ÀÖ´Â °á°ú¸¦ ¾òÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù.
int i;
func(&i, (unsigned int *)&i); // okay
µû¶ó¼ ÀÌ °°Àº °æ¿ì¿¡´Â ÄÄÆÄÀÏ·¯°¡ ÇÔ¼ö func() ¾È¿¡¼ pui¿Í pi°¡ °¡¸®Å°´Â ´ë»óü°¡ ´Ù¸§À» È®½ÅÇÏÁö ¸øÇÏ´Â ÀÌ»ó another_func(*pui);À» another_func(2);À¸·Î ÃÖÀûÈÇÒ ¼ö ¾ø°Ô µÈ´Ù. ÀÌ·¸°Ô C ¾ð¾î´Â ÀϺΠÃÖÀûȸ¦ Á¦ÇÑÇϸ鼱îÁö Çã¿ëÇØ ÁÙ Çʿ䰡 ÀÖ´Â ¿¡Àϸ®¾î¡°ú ¹«ÀǹÌÇϱ⿡ ±ÝÁöµÇ¾î¾ß ¸¶¶¥ÇÑ ¿¡Àϸ®¾î¡À» ±¸ºÐÇϰí ÀÖÁö¸¸ ºÒÇàÈ÷µµ C90¿¡¼´Â ±× ±ÔÄ¢ÀÌ ¿Ïº®ÇÏÁö ¸øÇß´Ù.
¿¹¸¦ µé¾î malloc()¸¦ ÅëÇØ µ¿ÀûÀ¸·Î ÇÒ´çµÇ´Â ´ë»óüÀÇ °æ¿ì, ¼±¾ðµÈ ´ë»óü¿Í´Â ´Þ¸® ±âº»ÀûÀ¸·Î °®´Â µ¥ÀÌÅÍÇüÀÌ ¾ø±â ¶§¹®¿¡ ¹«¾ùÀ» ±âÁØÀ¸·Î ¿¡Àϸ®¾î¡À» Çã°¡ ȤÀº ±ÝÁöÇØ¾ß ÇÏ´ÂÁö ºÒºÐ¸íÇß´Ù. µû¶ó¼ C99¿¡¼´Â ÀÌ·¯ÇÑ °æ¿ì±îÁöµµ ¸ðµÎ Æ÷¿ëÇÒ ¼ö ÀÖµµ·Ï À¯È¿ µ¥ÀÌÅÍÇü(effective type)À̶ó´Â °³³äÀ» µµÀÔÇØ ¿¡Àϸ®¾î¡ ±ÔÄ¢À» »ó¼¼È÷ ±â¼úÇϰí ÀÖ´Ù. ÇÏÁö¸¸ º¸¿ÏµÈ ±ÔÄ¢ ¿ª½Ã ¿©ÀüÈ÷ °ø¿ëü¿Í °ü·ÃµÈ ¿¡Àϸ®¾î¡À» ¿Ã¹Ù¸£°Ô ´Ù·çÁö ¸øÇØ ÇöÀç Ç¥ÁØÈ À§¿øÈ¸´Â ÀÌ ºÎºÐ¿¡ ´ëÇÑ ÇØ°áÃ¥À» ¸¶·Ã Áß¿¡ ÀÖ´Ù(ÀÚ¼¼ÇÑ ¹®Á¦´Â http://groups.google.com/groups?selm=G%25_i7.1992%24T4.16873%40www.newsranger.com Âü°í).
Á¦ÇÑµÈ Æ÷ÀÎÅÍ[Lang][Lib][Open]
Çϵå¿þ¾îÀûÀ¸·Î º´·Ä 󸮸¦ Áö¿øÇϴ ȯ°æ(¿¹¸¦ µé¸é º¤ÅÍ ÇÁ·Î¼¼¼)¿¡¼ Á¦°øÇÏ´Â º´·ÄÈ ±â´ÉÀ» Á¦´ë·Î Ȱ¿ëÇϱâ À§Çؼ´Â ±âº»ÀûÀ¸·Î ƯÁ¤ ¿¬»êÀÌ ¹Ýº¹Çؼ Àû¿ëµÇ´Â µÎ ¹è¿ ´ë»óü°¡ ¼·Î ¹«°üÇØ¾ß ÇÑ´Ù. Áï ±×¿Í °°Àº ȯ°æ¿¡¼ Á¦°øÇÏ´Â ¼º´É ÁÁÀº ÃÖÀûÈ ±â´ÉÀ» ½ÊºÐ Ȱ¿ëÇϱâ À§Çؼ´Â ƯÁ¤ ¿¬»êÀ» ¼öÇàÇÏ´Â ÇÔ¼ö¿¡ ¸Å°³º¯¼ö¸¦ ÅëÇØ ÁÖ¾îÁö´Â µÎ ¹è¿ÀÇ ¸ðµç ¿ä¼ÒµéÀÌ ¼·Î ¿¡Àϸ®¾î¡µÇ¾î¼´Â ¾È µÈ´Ù´Â ÀǹÌÀÌ´Ù.
C ¾ð¾î¸¦ óÀ½ Ç¥ÁØÈÇÏ´ø ½Ã±â¿¡ ÄÄÆÄÀÏ·¯¿¡°Ô µÎ ´ë»óü°¡ ¼·Î ¿¡Àϸ®¾î¡µÇÁö ¾Ê¾ÒÀ½À» È®½Å½Ã۱â À§ÇÑ ¹æ¹ýÀ¸·Î noalias¶ó´Â Çü ÇÑÁ¤¾î(type qualifier)¸¦ µµÀÔÇÏ·Á Çß´Ù. ÇÏÁö¸¸ ÀÌ Çü ÇÑÁ¤¾î´Â »ó´çÈ÷ ¾ö°ÝÇÏ°í º¹ÀâÇÑ Àǹ̸¦ °¡Áö°í ÀÖ¾î Á¦´ë·Î ±â¼úÇϱ⵵ ½±Áö ¾Ê¾Ò°í, À̸¦ µµÀÔÇÒ °æ¿ì ¾ð¾î¿¡ ½É°¢ÇÑ ¿ÀÁ¡À» ¸¸µé °¡´É¼ºµµ Àֱ⿡ ½ÉÇÑ ¹Ý´ë¿¡ ºÎµúÇô °á±¹ Ç¥ÁØ¿¡ ÀÔ¼ºÇÏÁö ¸øÇß´Ù(http://www.lysator.liu.se/c/dmr-on-noalias.html Âü°í).
´Ù¸¸ C90ÀÇ ³¡ÀÚ¶ô¿¡ ¼·Î °ãÃÄÁø µÎ ¹è¿ ´ë»óü¸¦ ÇÔ¼ö¿¡ Àü´ÞÇÏ´Â °ÍÀº º´·Ä ȯ°æ¿¡¼ÀÇ ÃÖÀûȸ¦ °í·ÁÇØ º°·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù´Â ÀÏÁ¾ÀÇ Ãæ°í¸¸ÀÌ ÀÚ¸®Àâ°í ÀÖÀ» »ÓÀ̾ú´Ù(<±×¸² 2>).
 |
| <±×¸² 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¿¡¼ ¸¸³¯ ¼ö ÀÖ´Ù. @