¢Ê 9ÀÏ: ¹®Àå - Á¡ÇÁ¹®


¢¹ A9. ¹®Àå (Statement)
  Ưº°ÇÑ °æ¿ì¸¦ Á¦¿ÜÇϸé, ¹®ÀåÀº ¼ø¼­´ë·Î ½ÇÇàµË´Ï´Ù. ¹®ÀåÀº ½ÇÇàÈ¿°ú¸¦ À§ÇØ ½ÇÇàµÇ´Â °ÍÀ̸ç, °ªÀ» °®Áö´Â ¾Ê½À´Ï´Ù. ¹®Àå¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ½À´Ï´Ù.

statement:
        labeled-statement
        expression-statement
        compound-statement
        selection-statement
        iteration-statement
        jump-statement

  ¢¹ A9.1 ¶óº§¹® (Labeled Statement)
  ¹®Àå¿¡´Â ¶óº§ÀÌ ºÙÀ» ¼ö ÀÖ½À´Ï´Ù.

labeled-statement:
        identifier : statement
        case constant-expression : statement
        default : statement

¶óº§¹® Áß, ¸íĪ (identifier) À» Æ÷ÇÔÇÏ´Â ¶óº§Àº ±× ¸íĪÀ» ¶óº§¸íÀ¸·Î ¼±¾ðÇÕ´Ï´Ù. ¸íĪÀÌ ºÙÀº ¶óº§ÀÇ À¯ÀÏÇÑ »ç¿ëó´Â goto ¹®ÀÇ ¸ñÀûÁö (target) ·Î ¾²ÀÌ´Â °ÍÀÔ´Ï´Ù. ¶óº§¸íÀÇ Åë¿ë¹üÀ§ (scope) ´Â ±× ¶óº§ÀÌ »ç¿ëµÈ ÇÔ¼ö ÀüüÀÔ´Ï´Ù. ¶óº§¸íÀº °íÀ¯ÀÇ ¸íĪÁ¾·ù (name space, A11.1) ¸¦ °¡Áö°í Àֱ⠶§¹®¿¡, ´Ù¸¥ Á¾·ùÀÇ ¸íΰú´Â Ãæµ¹ÇÏÁö ¾ÊÀ¸¸ç, Àç¼±¾ðµÉ ¼ö ¾ø½À´Ï´Ù.
  case ¶óº§°ú default ¶óº§Àº switch ¹® (A9.4) ¿¡ »ç¿ëµË´Ï´Ù. case ¶óº§ÀÇ »ó¼ö¼ö½ÄÀº Á¤¼öÇü (integral) À̾î¾ß ÇÕ´Ï´Ù.
  ¶óº§¹® ¸¸À¸·Î´Â ÇÁ·Î±×·¥ Á¦¾îÀÇ È帧 (flow of control) À» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù.

¢¹ A9.2 ¼ö½Ä¹® (Expression Statement)
  ´ëºÎºÐÀÇ ¹®ÀåÀº ¼ö½Ä¹®À̸ç, ¼ö½Ä¹®ÀÇ ÇüÅ´ ¾Æ·¡¿Í °°½À´Ï´Ù.

expression-statement:
        expression opt ;

´ëºÎºÐÀÇ ¼ö½Ä¹®Àº ´ëÀÔ¹®À̳ª ÇÔ¼öÈ£Ãâ ÀÔ´Ï´Ù. ¼ö½ÄÀÇ ¸ðµç ºÎÀÛ¿ë (side effect) Àº ´ÙÀ½ ¹®ÀåÀÌ ½ÇÇàµÇ±â Àü¿¡ ¿Ï·áµË´Ï´Ù. ¼ö½Ä¹®¿¡¼­ ¼ö½ÄÀÌ »ý·«µÈ ÇüÅ´ ³Î¹®Àå (null statement) À̶ó°í Çϸç, ¼øÈ¯¹®À̳ª ¶óº§¿¡ ºó º»Ã¼ (empty body) ¸¦ Á¦°øÇϴµ¥ Á¾Á¾ »ç¿ëµË´Ï´Ù.

¢º ¿ªÀÚ ÁÖ
  À§¿¡¼­ ¶óº§¹®ÀÇ ¹®¹ýÀ» º¸¸é ¾Ë ¼ö ÀÖµíÀÌ, ¶óº§ µÚ¿¡´Â ¹Ýµå½Ã ¹®ÀåÀÌ ³ª¿Í¾ß¸¸ ÇÕ´Ï´Ù. ÇÏÁö¸¸ ¶óº§ÀÌ ºí·° (ÇÔ¼öº»Ã¼ Æ÷ÇÔ) ÀÇ ³¡ºÎºÐ¿¡ ³õÀÌ´Â µîÀÇ ÀÌÀ¯·Î ¶óº§ µÚ¿¡ ³õÀÏ ¹®ÀåÀÌ ¾øÀ» ¶§ »ç¿ëÇÏ´Â °ÍÀÌ ³Î¹®Àå ÀÔ´Ï´Ù.

¢¹ A9.3 º¹¹® (Compound Statement)
  ÇϳªÀÇ ¹®ÀåÀÌ ÀÖ´Â °÷¿¡´Â, º¹¹® ('ºí·°' À̶ó°íµµ ÇÔ) À» ÀÌ¿ëÇØ¼­ ¿©·¯ ¹®ÀåÀÌ ³ª¿Ã ¼ö ÀÖ½À´Ï´Ù. ÇÔ¼öÁ¤ÀÇÀÇ º»Ã¼ ºÎºÐ (body) µµ º¹¹®ÀÔ´Ï´Ù.

compound-statement:
        { declaration-list opt   statement-list opt }

declaration-list:
        declaration
        declaration-list   declaration

statement-list:
        statement
        statement-list   statement

¸¸¾à ¼±¾ð-¸®½ºÆ® (declaration-list) ¿¡ ÀÖ´Â ¸íĪÀÌ ºí·¯¹Û¿¡ ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é, ¹Ù±ùÂÊ ¼±¾ðÀÇ ¿µÇâÀº ºí·°¾È¿¡¼­´Â º¸·ù (suspend) µÇ¸ç (A11.1), ºí·°À» ºüÁ®³ª¿À¸é ´Ù½Ã ¿µÇâ·ÂÀ» °®°Ô µË´Ï´Ù. ÀÌ·¯ÇÑ ±ÔÄ¢Àº °°Àº Á¾·ùÀÇ ¸íĪ (same name space) µé¿¡ Àû¿ëµË´Ï´Ù (A11); ´Ù¸¥ Á¾·ùÀÇ ¸íεéÀº ±¸ºÐµÇ¾î ´Ù·ç¾îÁý´Ï´Ù.

¢º ¿ªÀÚ ÁÖ
  ºí·° ³»¿Ü·Î °°Àº ¸íĪÀÌ ¼±¾ðµÈ´Ù¸é, ºí·°³»¿¡¼­´Â ºí·°¹ÛÀÇ ¼±¾ðÀÌ ¿µÇâ·ÂÀ» °®Áö ¸øÇÕ´Ï´Ù. ¿¹¸¦ µé¸é ¾Æ·¡¿Í °°½À´Ï´Ù.

int a;
{
      float a=3.141592;
      ...
      a = funcf();     /* ºÎµ¿Çü a */      
      ...
}
a = funci();       /* Á¤¼öÇü a */
...

À§ÀÇ ¿¹¿¡¼­, ¹Ù±ùÂÊÀÇ Á¤¼öÇü º¯¼ö a °¡ ºí·°¾È¿¡¼­ ºÎµ¿ÇüÀ¸·Î »õ·Î ¼±¾ðµÇ¾úÁö¸¸, ºí·° ¹ÛÀÇ a ¿Í ºí·°¾ÈÀÇ a ´Â ÀüÇô º°°³ÀÇ º¯¼öÀÔ´Ï´Ù. ºí·°ÀÌ ³¡³ª¸é ºÎµ¿Çü a ´Â ¼Ò¸êµÇ°í, Á¤¼öÇü a °¡ ´Ù½Ã ¿µÇâ·ÂÀ» °®°Ô µË´Ï´Ù. ¸¸¾à a °¡ ºí·°¾È¿¡¼­ ºí·°¹ÛÀÇ µ¥ÀÌÅÍÇü°ú µ¿ÀÏÇÏ°Ô Á¤¼öÇüÀ¸·Î ¼±¾ðµÇ¾ú´Ù°í ÇØµµ ºí·°¾ÈÆÆÀÇ a ´Â º°°³ÀÇ º¯¼ö·Î Ãë±ÞµË´Ï´Ù.

  ¶ÇÇÑ °°Àº ºí·°³»¿¡ ÀÖ´Ù°í ÇØµµ ¸íĪÁ¾·ù (name space) °¡ ´Ù¸£¸é µ¿ÀÏÇÑ ¸íĪÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é,

int whatisthematrix;
...
goto whatisthematrix;              
...
whatisthematrix:
...

À§ÀÇ ¿¹¿¡¼­, º¯¼ö¸í°ú ¶óº§¸íÀÌ ¸ðµÎ whatisthematrix ·Î °°Áö¸¸, º¯¼ö¸í°ú ¶óº§¸íÀº ¸íĪÁ¾·ù (name space) °¡ ´Ù¸£±â ¶§¹®¿¡ ¼­·Î Ãæµ¹ÇÏÁö ¾Ê°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

  ÀÚµ¿ ±â¾ïºÎ·ùÀÇ ´ë»óü´Â ºí·°¿¡ ÁøÀÔÇÒ ¶§¸¶´Ù ÃʱâÈ­µÇ¸ç, ¼±¾ðÀÚ (declarator) °¡ ¾²ÀÎ ¼ø¼­´ë·Î ÃʱâÈ­µË´Ï´Ù. ¸¸¾à Á¡ÇÁ¹®À¸·Î ÀÎÇØ ºí·°¾ÈÀ¸·Î ÁøÀÔÇÏ°Ô µÇ¸é, ÃʱâÈ­´Â ÀϾÁö ¾Ê½À´Ï´Ù. Á¤Àû ´ë»óü´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â Àü¿¡ µü Çѹø¸¸ ÃʱâÈ­µË´Ï´Ù.

¢¹ A9.4 ¼±Åù® (Selection Statement)
  ¼±Åù®Àº ÁÖ¾îÁø ¿©·¯°¡ÁöÀÇ Á¦¾îÈ帧 Áß¿¡ Çϳª¸¦ ¼±ÅÃÇÒ ¶§ »ç¿ëµË´Ï´Ù.

selection-statement:
        if ( expression ) statement
        if ( expression ) statement  else  statement
        switch ( expression ) statement

  À§¿¡ Á¦½ÃµÈ µÎ°¡Áö ÇüÅÂÀÇ if ¹®¿¡¼­, ¼ö½Ä (»ê¼úÇü arithmetic type À̳ª Æ÷ÀÎÅÍÇü pointer type À̾î¾ß ÇÔ) ÀÌ ¸ðµç ºÎÀÛ¿ë (side effect) À» Æ÷ÇÔÇØ Æò°¡µÈ ÈÄ, ¼ö½Ä°ªÀÌ 0 °ú ´Ù¸£¸é ('Âü'À̸é) ù¹øÂ° ¹®ÀåÀÌ ½ÇÇàµË´Ï´Ù. µÎ¹øÂ° ÇüÅÂÀÇ if ¹®¿¡¼­´Â ¼ö½ÄÀÇ °ªÀÌ 0 À̸é ('°ÅÁþ'À̸é) µÎ¹øÂ° ¹®ÀåÀÌ ½ÇÇàµË´Ï´Ù. º¹ÀâÇÑ if-else ¹®¿¡¼­, else ¿¡ »ý±â´Â ¸ðÈ£ÇÔ (¾î¶² if ¹®°ú ¿¬°áµÈ else Àΰ¡?) Àº °°Àº Áßø·¹º§ (nest level) ÀÇ ºí·°¿¡ ÀÖ´Â, else ¹®ÀÌ ¾ø´Â ¸¶Áö¸· if ¹®°ú ¿¬°á½ÃÅ´À¸·Î½á ÇØ°áµË´Ï´Ù.
  switch ¹®Àº Á¤¼öÇü ¼ö½Ä (integral) ÀÇ °ª¿¡ µû¶ó ¿©·¯ ¹®ÀåÁß Çϳª·Î ÇÁ·Î±×·¥ Á¦¾î¸¦ ¿Å±é´Ï´Ù. switch ¹®¿¡ ÁÖ¾îÁö´Â ¹®ÀåÀº ÀüÇüÀûÀ¸·Î º¹¹®ÀÔ´Ï´Ù. º¹¹®¾ÈÀÇ ¾î¶°ÇÑ ¹®Àå¿¡µµ case ¶óº§ (A9.1) ÀÌ ºÙÀ» ¼ö ÀÖ½À´Ï´Ù. switch ¹®ÀÇ È帧Á¦¾î ¼ö½Ä¿¡´Â Á¤¼öÁø±Þ (integral promotion, A6.1) ÀÌ ¼öÇàµÇ¸ç, case »ó¼öµéÀº ±× Áø±ÞµÈ µ¥ÀÌÅÍÇüÀ¸·Î º¯È¯µË´Ï´Ù. ÇϳªÀÇ switch ¹®¾È¿¡´Â, (º¯È¯µÈ ÈÄÀÇ µ¥ÀÌÅÍÇüÀ» °®´Â) µ¿ÀÏÇÑ case »ó¼ö°¡ Áߺ¹µÇ¾î Á¸ÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ º¹¹®¾È¿¡´Â ÃÖ´ë 1°³ÀÇ default ¶óº§ÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. switch ¹®Àº ÁßøµÉ ¼ö ÀÖ½À´Ï´Ù; case ¿Í default ¶óº§Àº ±× ¶óº§À» Æ÷ÇÔÇÏ´Â °¡Àå ¾ÈÂÊÀÇ switch ¹®°ú¸¸ °ü·ÃÀÌ ÀÖ½À´Ï´Ù.

¢º ¿ªÀÚ ÁÖ
  Áï, °°Àº switch ¹®¿¡´Â Áߺ¹µÈ case »ó¼ö°¡ ÀÖÀ» ¼ö ¾øÁö¸¸, ÁßøµÈ switch ¹®ÀÇ ¾ÈÆÆÀ¸·Î´Â Áߺ¹µÈ case »ó¼ö°¡ À־ ±¸ºÐÀÌ µÇ±â ¶§¹®¿¡ °¡´ÉÇÏ´Ù´Â ÀǹÌÀÔ´Ï´Ù.

  switch ¹®ÀÌ ½ÇÇàµÇ¸é, ¸ðµç ºÎÀÛ¿ë (side effect) À» Æ÷ÇÔÇØ ¼ö½ÄÀÌ Æò°¡µÇ°í, °¢ case »ó¼ö¿Í ºñ±³µË´Ï´Ù. ¼ö½ÄÀÇ °ªÀÌ case »ó¼öÁß Çϳª¿Í ÀÏÄ¡ÇÑ´Ù¸é, ÇÁ·Î±×·¥ Á¦¾î´Â ±× case ¶óº§·Î ¿Å°ÜÁý´Ï´Ù. ÀÏÄ¡ÇÏ´Â case ¶óº§ÀÌ ¾ø°í, default ¶óº§ÀÌ ÀÖ´Ù¸é, default ¶óº§·Î Á¦¾î°¡ ¿Å°ÜÁý´Ï´Ù. ¸¸¾à default ¶óº§¸¶Á® ¾ø´Ù¸é switch ¹®ÀÇ ¹®ÀåµéÀº ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.

  ÃÊÆÇ¿¡¼­, switch ¹®ÀÇ È帧Á¦¾î ¼ö½Ä°ú case ¼ö½ÄÀº int ÇüÀ̾î¾ß¸¸ Çß½À´Ï´Ù.

¢¹ A9.5 ¼øÈ¯¹® (Iteration Statement)
  ¼øÈ¯¹®Àº ·çÇÁ (loop) ¸¦ ½ÇÇàÇØ ÁÝ´Ï´Ù.

iteration-statement:
        while ( expression ) statement
        do  statement  while ( expression ) ;
        for ( expression opt ; expression opt ; expression opt ) statement

  while °ú do ¹®¿¡¼­, ±Í¼ÓµÈ ¹®Àå (substatement) Àº ¼ö½ÄÀÇ °ªÀÌ 0 ÀÌ ¾Æ´Ñµ¿¾È ('Âü'ÀÎ µ¿¾È) ¹Ýº¹Çؼ­ ½ÇÇàµË´Ï´Ù; ¼ö½ÄÀº »ê¼úÇü (arithmetic type) À̳ª Æ÷ÀÎÅÍÇü (pointer type) À̾î¾ß ÇÕ´Ï´Ù. while ¹®¿¡¼­ Á¶°Ç°Ë»ç´Â ¸Å ·çÇÁ°¡ ½ÃÀ۵DZâ Àü¿¡ ¼ö½ÄÀÇ ºÎÀÛ¿ë (side effect) ±îÁö Æ÷ÇÔÇØ ÀÌ·ç¾îÁý´Ï´Ù; do ¹®¿¡¼­´Â ¸Å ·çÇÁ°¡ ½ÇÇàµÈ ÈÄ¿¡ ÀÌ·ç¾îÁý´Ï´Ù.
  for ¹®¿¡¼­, ù¹øÂ° ¼ö½ÄÀº Çѹø¸¸ Æò°¡µÇ°í, µû¶ó¼­ ·çÇÁ¸¦ ÃʱâÈ­Çϴµ¥ Àû´çÇÕ´Ï´Ù. ù¹øÂ° ¼ö½ÄÀÇ µ¥ÀÌÅÍÇü¿¡´Â Á¦¾àÀÌ ¾ø½À´Ï´Ù. µÎ¹øÂ° ¼ö½ÄÀº »ê¼úÇü (arithmetic type) À̳ª Æ÷ÀÎÅÍÇü (pointer type) À̾î¾ß ÇÕ´Ï´Ù; µÎ¹øÂ° ¼ö½ÄÀº ¸Å ·çÇÁ¸¦ µ¹±â Àü¿¡ Æò°¡µÇ¸ç, ¼ö½ÄÀÇ °ªÀÌ 0 ÀÌ µÇ¸é for ¹®Àº Á¾·áµË´Ï´Ù. ¼¼¹øÂ° ¼ö½ÄÀº ¸Å ·çÇÁ¸¦ µ· ÈÄ¿¡ Æò°¡µÇ°í, µû¶ó¼­ ·çÇÁÁ¦¾îº¯¼öÀÇ ÀçÃʱâÈ­ (re-initialization) ¿¡ »ç¿ëÇÏ¸é µË´Ï´Ù. ¼¼¹øÂ° ¼ö½ÄÀÇ µ¥ÀÌÅÍÇü¿¡´Â Á¦¾àÀÌ ¾ø½À´Ï´Ù. °¢ ¼ö½ÄÀÇ ºÎÀÛ¿ë (side-effect) Àº ±× ¼ö½ÄÀÌ Æò°¡µÈ ÈÄ¿¡ ¹Ù·Î ¿Ï·áµË´Ï´Ù. for ¹®ÀÇ ¹®ÀåÀÌ continue ¹®À» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù¸é, ´ÙÀ½ÀÇ ¹®ÀåÀº

          for ( expression1 ; expression2 ; expression3 ) statement

¾Æ·¡¿Í µ¿ÀÏÇÕ´Ï´Ù.

          expression1 ;
          while ( expression2 ) {
                    statement
                    expression3 ;
          }

  ¼¼ ¼ö½ÄÁß ¾î¶°ÇÑ °Íµµ »ý·«µÉ ¼ö ÀÖ½À´Ï´Ù. µÎ¹øÂ° ¼ö½ÄÀÌ »ý·«µÈ´Ù¸é Á¶°Ç°Ë»ç´Â, 0 ÀÌ ¾Æ´Ñ »ó¼ö°ªÀ¸·Î (Ç×»ó 'Âü'À¸·Î) Æò°¡µË´Ï´Ù.

¢¹ A9.6 Á¡ÇÁ¹® (Jump Statement)
  Á¡ÇÁ¹®Àº ÇÁ·Î±×·¥ÀÇ Á¦¾î¸¦ ¹«Á¶°Ç ¿Å±é´Ï´Ù.

jump-statement:
        goto identifier ;
        continue ;
        break ;
        return expression opt ;

  goto ¹®¿¡¼­ ¸íĪ (identifier) Àº ÇöÀç ÇÔ¼ö¾ÈÀÇ ¶óº§ (A9.1) À̾î¾ß ÇÕ´Ï´Ù. ÇÁ·Î±×·¥ Á¦¾î°¡ ±× ¶óº§·Î ¿Å°ÜÁý´Ï´Ù.
  continue ¹®Àº ¼øÈ¯¹®¿¡¸¸ ³ª¿Ã ¼ö ÀÖ½À´Ï´Ù. continue ¹®Àº, continue ¹®ÀÌ ÀÖ´Â °¡Àå ¾ÈÂÊ ·çÇÁÀÇ ³²¾ÆÀÖ´Â ¹®ÀåµéÀ» °Ç³Ê¶Ù°Ô ÇØÁÝ´Ï´Ù. ´õ ÀÚ¼¼ÇϰÔ, ´ÙÀ½ÀÇ °¢ ¹®Àå¿¡¼­,

while (...) {              
      ...
contin: ;
}
do {
      ...
contin: ;
} while (...);              
for (...) {
      ...
contin: ;
}

continue ¹®ÀÌ ÁßøµÈ ¾ÈÂÊ ¼øÈ¯¹®¿¡ ÀÖÁö ¾Ê´Â ÇÑ, continue ¹®ÀÇ ÇൿÀº goto contin À» »ç¿ëÇÑ °Í°ú µ¿ÀÏÇÕ´Ï´Ù.
  break ¹®Àº ¿ÀÁ÷ ¼øÈ¯¹®°ú switch ¹®¿¡¼­¸¸ ³ª¿Ã ¼ö ÀÖÀ¸¸ç, break ¹®ÀÌ ÀÖ´Â °¡Àå ¾ÈÂÊ ·çÇÁ¸¦ ¹þ¾î³ª°Ô ÇØÁÝ´Ï´Ù; ÇÁ·Î±×·¥ÀÇ Á¦¾î´Â ¹þ¾î³­ ·çÇÁÀÇ ´ÙÀ½ ¹®ÀåÀ¸·Î ¿Å°ÜÁý´Ï´Ù.
  ÇÔ¼ö´Â return ¹®¿¡ ÀÇÇØ ±× ÇÔ¼ö¸¦ È£ÃâÇÑ °÷À¸·Î µ¹¾Æ°©´Ï´Ù. return ¹® µÚ¿¡ ¼ö½ÄÀÌ µû¶ó¿À¸é, ±× ¼ö½ÄÀÇ °ªÀº ±× ÇÔ¼öÀÇ È£ÃâÀÚ (caller) ·Î ¹ÝȯµË´Ï´Ù. ¼ö½ÄÀº ¸¶Ä¡ ´ëÀÔµÈ °Íó·³ ÇÔ¼öÀÇ ¹ÝȯÇüÀ¸·Î º¯È¯µË´Ï´Ù.
  ÇÁ·Î±×·¥ÀÇ Á¦¾î°¡ ÇÔ¼öÀÇ ³¡ºÎºÐ±îÁö µµ´ÞÇØ ÇÔ¼ö°¡ Á¾·áµÈ´Ù¸é, ÀÌ´Â ¼ö½ÄÀÌ ¾ø´Â return ¹®À» »ç¿ëÇÑ °Í°ú µ¿ÀÏÇÕ´Ï´Ù. µÎ °æ¿ì ¸ðµÎ, ¹ÝȯµÇ´Â °ªÀº Á¤ÀǵǾî ÀÖÁö ¾Ê½À´Ï´Ù (undefined).



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