¢¹ 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).
|