| |
¢¹ 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) ·Î °áÁ¤µË´Ï´Ù.
|