¢Ê 11ÀÏ: Åë¿ë¹üÀ§¿Í ¿¬°á - ¿¬°á


¢¹ A11. Åë¿ë¹üÀ§¿Í ¿¬°á (Scope and Linkage)
  ÇÁ·Î±×·¥Àº Çѹø¿¡ ¸ðµÎ ÄÄÆÄÀ쵃 ÇÊ¿ä´Â ¾ø½À´Ï´Ù; ÇÁ·Î±×·¥ÀÇ ¼Ò½º´Â °¢ ¹ø¿ª´ÜÀ§ (translation unit) ¸¦ ´ã´Â ¿©·¯°³ÀÇ ÆÄÀÏ·Î ³ª´©¾îÁú ¼ö ÀÖÀ¸¸ç, ¶óÀ̺귯¸® (library) ·Î ºÎÅÍ ¹Ì¸® ÄÄÆÄÀÏµÈ ÇÁ·Î±×·¥ ·çƾ (routine) ÀÌ ·Îµå (load) µÉ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥¿¡¼­ ÇÔ¼ö°£ÀÇ ÀÇ»ç¼ÒÅëÀº ÇÔ¼öÈ£Ãâ°ú ¿ÜºÎ µ¥ÀÌÅ͸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁý´Ï´Ù.
  µû¶ó¼­, µÎ°¡Áö Á¾·ùÀÇ Åë¿ë¹üÀ§¸¦ »ý°¢ÇØ º¼ ¼ö ÀÖ½À´Ï´Ù. ù°·Î, ÇÁ·Î±×·¥ ¼Ò½º¿¡¼­ ¾î¶°ÇÑ ¸íĪÀÇ Æ¯¼ºÀÌ ¾Ë·ÁÁö´Â ¹üÀ§¸¦ ÀǹÌÇÏ´Â, ¾îÈÖÀû Åë¿ë¹üÀ§ (lexical scope) °¡ ÀÖ½À´Ï´Ù; µÑ°·Î´Â ºÐ¸®µÇ¾î ÄÄÆÄÀϵǴ ¹ø¿ª´ÜÀ§¿¡¼­ ¸íĪµé »çÀÌÀÇ °ü°è (connection) ¸¦ °áÁ¤ÇÏ´Â ¿ÜºÎ¿¬°á (external linkage) À» °®´Â, ´ë»óü¿Í ÇÔ¼ö¿¡ °ü·ÃµÈ Åë¿ë¹üÀ§ÀÔ´Ï´Ù.

  ¢¹ A11.1 ¾îÈÖÀû Åë¿ë¹üÀ§ (Lexical Scope)
  ¸íεéÀº ¼­·Î°£¿¡ Ãæµ¹ÇÏÁö ¾Ê´Â ¿©·¯ Á¾·ù·Î ºÐ·ùµË´Ï´Ù. ¸¸¾à ¸íĪÀÇ Á¾·ù°¡ ´Ù¸£´Ù¸é (different name space), °°Àº ¸íĪÀÌ °°Àº Åë¿ë¹üÀ§ (scope) ¿¡¼­ ´Ù¸¥ ¸ñÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ¸íĪÀÇ Á¾·ù (name space) ´Â ´ÙÀ½°ú °°½À´Ï´Ù: ´ë»óü, ÇÔ¼ö, typedef¸í, enum »ó¼ö; ¶óº§; ±¸Á¶Ã¼ ¡¤ °ø¿ëü ¡¤ ¿­°ÅÀÇ ÅÃ; µ¶ÀÚÀûÀ¸·Î Ãë±ÞµÇ´Â °¢ ±¸Á¶Ã¼¿Í °ø¿ëüÀÇ ¸â¹öÀÔ´Ï´Ù.
  ÀÌ ±ÔÄ¢Àº ÃÊÆÇ¿¡¼­ ¼­¼úÇÑ °Í°ú´Â ¿©·¯°¡Áö·Î ´Ù¸¨´Ï´Ù. ¶óº§Àº °íÀ¯ÀÇ ¸íĪÁ¾·ù (name space) ¸¦ °®Áö ¸øÇß¾ú½À´Ï´Ù; ¶ÇÇÑ ±¸Á¶Ã¼, °ø¿ëüÀÇ ÅÃÀÌ °¢°¢ µ¶¸³µÈ ¸íĪÁ¾·ù¸¦ °®¾úÀ¸¸ç, ÀϺΠÄÄÆÄÀÏ·¯¿¡¼­´Â ¿­°ÅÅõµ µ¶¸³µÈ ¸íĪÁ¾·ù¸¦ °®À» ¼ö ÀÖ¾ú½À´Ï´Ù; ´Ù¸¥ Á¾·ùÀÇ ÅÃÀ» °°Àº Á¾·ùÀÇ ¸íĪÀ¸·Î ¹­Àº °ÍÀº »õ·Î¿î Á¦¾àÀÔ´Ï´Ù. ÃÊÆÇ°ú ºñ±³ÇØ °¡Àå Áß¿äÇÑ º¯È­´Â °¢ ±¸Á¶Ã¼¿Í °ø¿ëü°¡ ÀÚ½ÅÀÇ ¸â¹öµé¿¡ ´ëÇØ µ¶¸³µÈ ¸íĪÁ¾·ù¸¦ »ý¼ºÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ·Î ÀÎÇØ, ¿©·¯ ´Ù¸¥ ±¸Á¶Ã¼¿¡ µ¿ÀÏÇÑ ¸íĪÀÇ ¸â¹ö°¡ ³ª¿Ã ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ±ÔÄ¢Àº ÀÌ¹Ì ¿©·¯Çص¿¾È ÄÄÆÄÀÏ·¯¿¡¼­ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ°í ÀÖ¾ú½À´Ï´Ù.

  ¿ÜºÎ¼±¾ð (external declaration) ¿¡ ÀÖ´Â ´ë»óü¸íÀ̳ª ÇÔ¼ö¸íÀÇ ¾îÈÖÀû Åë¿ë¹üÀ§´Â ±× ¼±¾ðÀÚ (delcrator) ÀÇ ³¡¿¡¼­ ½ÃÀÛÇØ ±× ¹ø¿ª´ÜÀ§ (translation unit) ÀÇ ³¡±îÁö Áö¼ÓµË´Ï´Ù. ÇÔ¼öÁ¤ÀÇ¿¡ ÀÖ´Â ¸Å°³º¯¼öÀÇ Åë¿ë¹üÀ§´Â ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â º»Ã¼ (body) ¿¡¼­ ½ÃÀÛÇØ¼­ ±× ÇÔ¼ö¾È¿¡¼­ °è¼Ó Áö¼ÓµË´Ï´Ù; ÇÔ¼ö¼±¾ð¿¡ ÀÖ´Â ¸Å°³º¯¼öÀÇ Åë¿ë¹üÀ§´Â ¼±¾ðÀÚ (declarator) ÀÇ ³¡¿¡¼­ ÇÔ²² ³¡³³´Ï´Ù. ºí·°ÀÇ »ó´ÜºÎ¿¡¼­ ¼±¾ðµÈ ¸íĪÀÇ Åë¿ë¹üÀ§´Â ±× ¼±¾ðÀÚÀÇ ³¡¿¡¼­ ½ÃÀÛÇØ¼­, ±× ºí·°ÀÇ ³¡±îÁö Áö¼ÓµË´Ï´Ù. ¶óº§ÀÇ Åë¿ë¹üÀ§´Â ±× ¶óº§ÀÌ ÀÖ´Â ÇÔ¼ö ÀüüÀÔ´Ï´Ù. ±¸Á¶Ã¼ ÅÃ, °ø¿ëü Åðú ¿­°Å »ó¼öÀÇ Åë¿ë¹üÀ§´Â ÇüÁöÁ¤ÀÚ (type specifier) ¿¡ ±×°ÍµéÀÌ ³ªÅ¸³ª¸é¼­ ½ÃÀÛÇØ¼­, (ÇÔ¼ö ¿ÜºÎ¿¡¼­ ¼±¾ðµÉ °æ¿ì¿¡´Â) ¹ø¿ª´ÜÀ§ÀÇ ³¡±îÁö, (ÇÔ¼ö¾È¿¡¼­ ¼±¾ðµÉ ¶§¿¡´Â) ºí·°ÀÇ ³¡±îÁö Áö¼ÓµË´Ï´Ù.
  ÇÔ¼ö º»Ã¼¸¦ ±¸¼ºÇÏ´Â ºí·°À» Æ÷ÇÔÇØ, ºí·°ÀÇ »ó´ÜºÎ¿¡¼­ ¸íĪÀÌ ¸í¹éÈ÷ ¼±¾ðµÈ´Ù¸é, ºí·° ¹Û¿¡ ÀÖ´Â µ¿ÀÏÇÑ ¸íĪÀÇ ¼±¾ðÀº ºí·°ÀÌ ³¡³¯¶§±îÁö º¸·ù (suspend) µË´Ï´Ù.

¢¹ A11.2 ¿¬°á (Linkage)
  ÇÑ ¹ø¿ª´ÜÀ§ (translation unit) ³»¿¡¼­, ³»ºÎ¿¬°á (internal linkage) À» °®´Â ´ë»óü¸íÀ̳ª ÇÔ¼ö¸íÀÇ ¸ðµç ¼±¾ðÀº °°Àº °ÍÀ» ÂüÁ¶Çϰí, ±× ¸íĪÀ̳ª ÇÔ¼ö´Â ±× ¹ø¿ª´ÜÀ§ ¾È¿¡¼­ À¯ÀÏ (unique) ÇØ¾ß ÇÕ´Ï´Ù. ¿ÜºÎ¿¬°á (external linkage) À» °®´Â °°Àº ´ë»óü¸íÀ̳ª ÇÔ¼ö¸íÀÇ ¸ðµç ¼±¾ðÀº °°Àº °ÍÀ» ÂüÁ¶Çϰí, ±× ´ë»óü³ª ÇÔ¼ö´Â ÇÁ·Î±×·¥ Àüü¿¡ °ÉÃÄ °øÀ¯µË´Ï´Ù.
  A10.2 Àý¿¡¼­ À̾߱âÇßµíÀÌ, static ÁöÁ¤ÀÚ°¡ ¾î¶°ÇÑ ¸íĪÀÇ Ã¹¹øÂ° ¿ÜºÎ¼±¾ð (external declaration) ¿¡ »ç¿ëµÈ´Ù¸é ±× ¸íĪÀº ³»ºÎ¿¬°á (internal linkage) À» °®À¸¸ç, ±×·¸Áö ¾ÊÀ¸¸é ¿ÜºÎ¿¬°á (external linkage) À» °®½À´Ï´Ù. ºí·°¾È¿¡ ÀÖ´Â ¸íĪÀÇ ¼±¾ð¿¡ extern ÁöÁ¤ÀÚ°¡ ¾øÀ¸¸é, ±× ¸íĪÀº ¿¬°áÀ» °®Áö ¾ÊÀ¸¸ç, ÇÔ¼ö¾È¿¡¼­¸¸ À¯ÀÏ (unique) ÇÕ´Ï´Ù. ¸¸¾à ºí·°¾È¿¡¼­ extern ÁöÁ¤ÀÚ¸¦ Æ÷ÇÔÇϰí, ±× ¸íĪÀÇ ¿ÜºÎ¼±¾ðÀÌ ºí·°À» µÑ·¯½Î°í ÀÖ´Â Åë¿ë¹üÀ§ ³»¿¡¼­ À¯È¿ (active) ÇÏ´Ù¸é, ±× ¸íĪÀº ¿ÜºÎ¼±¾ð°ú µ¿ÀÏÇÑ ¿¬°áÀ» °®À¸¸ç, °°Àº ´ë»óü³ª ÇÔ¼ö¸¦ ÂüÁ¶ÇÕ´Ï´Ù; ¿ÜºÎ¼±¾ðÀÌ º¸ÀÌÁö ¾Ê´Â´Ù¸é, ±× ¸íĪÀÇ ¿¬°áÀº ¿ÜºÎ¿¬°á (external linkage) ·Î °áÁ¤µË´Ï´Ù.



ÀÌÀü [¡ã ¸ÇÀ§·Î]
[¢Ê ¸ñÂ÷·Î]
´ÙÀ½