| |
¢¹ A8.5 ¼±¾ðÀÚ (Declarator)
declarator:
pointer opt direct-declarator
direct-declarator:
identifier
( declarator )
direct-declarator [ constant-expression opt ]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-list opt )
pointer:
* type-qualifier-list opt
* type-qualifier-list opt pointer
type-qualifier-list:
type-qualifier
type-qualifier-list type-qualifier |
¼±¾ðÀÚÀÇ ±¸Á¶´Â °£Á¢ÁöÁ¤ (indirection), ÇÔ¼ö (function), ¹è¿¼ö½Ä (array
expression) ÀÇ ±¸Á¶¿Í ºñ½ÁÇÕ´Ï´Ù; °áÇÕ¹æ½Ä (grouping) Àº µ¿ÀÏÇÕ´Ï´Ù.
¢¹ A8.6 ¼±¾ðÀÚÀÇ ÀÇ¹Ì (Meaning of Declarator)
¼±¾ðÀÚÀÇ ¸®½ºÆ®´Â ÇüÁöÁ¤ÀÚ¿Í ±â¾ïºÎ·ù ÁöÁ¤ÀÚ µÚ¿¡ ³ªÅ¸³³´Ï´Ù. °¢ ¼±¾ðÀÚ´Â
Á÷Á¢-¼±¾ðÀÚ (direct-declarator) ÀÇ Ã³À½¿¡ Á¦½ÃµÈ ÇѰ³ÀÇ ÁÖ¿äÇÑ
¸íĪ (identifier) À» ¼±¾ðÇÕ´Ï´Ù. ±â¾ïºÎ·ù ÁöÁ¤ÀÚ´Â ÀÌ ¸íĪ¿¡ Á÷Á¢ Àû¿ëµÇÁö¸¸,
µ¥ÀÌÅÍÇüÀº ¼±¾ðÀÚÀÇ ÇüÅ¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ¼±¾ðÀÚ´Â, ¼±¾ðÀÚÀÇ ¸íĪÀÌ
±× ¼±¾ðÀÚ¿Í µ¿ÀÏÇÑ ÇüÅÂÀÇ ¼ö½Ä¿¡ ³ªÅ¸³µÀ» ¶§, ÁÖ¾îÁø µ¥ÀÌÅÍÇüÀÇ ´ë»óü¸¦
»ý¼ºÇÑ´Ù´Â Àǹ̷ΠÀÌÇØµË´Ï´Ù.
¼±¾ð ÁöÁ¤ÀÚ (A8.2) ÀÇ µ¥ÀÌÅÍÇü ºÎºÐ°ú Ưº°ÇÑ ¼±¾ðÀÚ¿¡ ´ëÇØ¼¸¸ »ý°¢Çغ¸¸é,
¼±¾ðÀº "T D" ÀÇ ÇüŸ¦ °®À¸¸ç, T ´Â µ¥ÀÌÅÍÇü, D ´Â ¼±¾ðÀÚ¸¦ ³ªÅ¸³À´Ï´Ù. ´Ù¾çÇÑ
ÇüÅÂÀÇ ¼±¾ðÀÚ¿¡¼ ¸íĪ¿¡ ¼Ó¼ºÀ» ÁÖ´Â µ¥ÀÌÅÍÇüÀº ÀÌ·¯ÇÑ Ç¥±â¹ýÀ» ÀÌ¿ëÇØ ±Í³³ÀûÀ¸·Î
(inductively) ¼¼úµË´Ï´Ù.
¼±¾ð T D ¿¡¼, D °¡ ¾Æ¹«°Íµµ ºÙÁö¾ÊÀº ¸íĪÀ̶ó¸é, ±× ¸íĪÀÇ µ¥ÀÌÅÍÇüÀº
T ÀÔ´Ï´Ù.
¼±¾ð T D ¿¡¼, D °¡
( D1 )
°ú °°Àº ÇüŸ¦ °®°í ÀÖ´Ù¸é, D1 ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀº D ¿Í µ¿ÀÏÇÕ´Ï´Ù.
°ýÈ£´Â µ¥ÀÌÅÍÇüÀ» ¹Ù²ÙÁö ¸øÇÏÁö¸¸, º¹ÀâÇÑ ¼±¾ðÀÚ¸¦ ¹´Â ¹æ½ÄÀº ¹Ù²Ü ¼ö
ÀÖ½À´Ï´Ù.
¢¹ A8.6.1 Æ÷ÀÎÅÍ ¼±¾ðÀÚ (Pointer Declarator)
¼±¾ð T D ¿¡¼,
* type-qualifier-list opt D1
D °¡ À§¿Í °°Àº ÇüŸ¦ °®°í, ¼±¾ð T D1 ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀÌ "type-modifier
T (T Çüº¯°æÀÚ)" ¶ó¸é, D ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀº "type-modifier
type-qualifier-list pointer to T (ÇüÇÑÁ¤¾î TÇü Æ÷ÀÎÅÍ Çüº¯°æÀÚ)" ÀÔ´Ï´Ù.
* µÚ¿¡ ÁÖ¾îÁø ÇüÇÑÁ¤¾î´Â Æ÷ÀÎÅͰ¡ °¡¸£Å°´Â ´ë»óü°¡ ¾Æ´Ñ, Æ÷ÀÎÅÍ ÀÚü¿¡
Àû¿ëµË´Ï´Ù.
 |
 |
¢º ¿ªÀÚ ÁÖ
µ¥ÀÌÅÍÇüÀ» Àû´Â ºÎºÐÀº ¿ø¹®À» ±×´ë·Î ¿Å±â°í, °ýÈ£¾È¿¡
¹ø¿ªÀ» Àû¾ú½À´Ï´Ù. ¿µ¾îÀÇ Æ¯¼º»ó ¸Ç¾Õ¿¡ °É¸®´Â Çüº¯°æÀÚ°¡
Çѱ¹¾î·Î ¹ø¿ªÇÒ ¶§´Â ¸Ç µÚ·Î °¡±â ¶§¹®¿¡ ±×·¸°Ô Àû¾îÁÖ´Â
µîÀÇ ³ë·ÂÀº ÇßÁö¸¸, °¡´ÉÇÏ¸é ¿ø¹® ±×´ë·Î¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
ÀÌ ºÎºÐÀÇ ³»¿ëÀº º¹ÀâÇØ º¸ÀÌÁö¸¸, ¼±¾ðÀ»
ºÐ¼®ÇØ µ¥ÀÌÅÍÇüÀ» °áÁ¤ÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ¾Æ·¡¿¡ ³ª¿À´Â ¿¹¸¦
º¸¸é ÀÌÇØ°¡ Á» ´õ ½¬¿ï °Ì´Ï´Ù. ÀÌÇØ°¡ ½±µµ·Ï ¿ø¹®¿¡´Â ¾ø´Â
¼³¸íÀ» ³ª¸§´ë·Î Ãß°¡ÇÏ¿´½À´Ï´Ù. |
|
 |
 |
¿¹¸¦ µé¾î, ´ÙÀ½°ú °°Àº ¼±¾ðÀ» »ý°¢Çغ¸¸é,
int *ap[];
¿©±â¼ ap[] °¡ D1 ¿¡ ÇØ´çµË´Ï´Ù; ¼±¾ð "int ap[]" (¾Æ·¡ '¹è¿ ¼±¾ðÀÚ' Âü°í) ´Â
ap ¸¦ "array of int (int Çü ¹è¿)" ·Î ¸¸µé¾î ÁÖ°í, µû¶ó¼ * µÚ¿¡ ³ª¿À´Â ÇüÇÑÁ¤¾î
¸®½ºÆ® (type-qualifier list) ´Â ¾ø°í, Çüº¯°æÀÚ (type-modifier) ´Â
"array of (¡ÀÇ ¹è¿, ap[] °¡ D1 À̹ǷÎ)" °¡ µÇ´Â °ÍÀÔ´Ï´Ù. °á±¹ ¸íĪ ap ¿¡
½ÇÁ¦·Î ¼±¾ðµÇ´Â µ¥ÀÌÅÍÇüÀº "array of pointers to int (int Çü Æ÷ÀÎÅÍÀÇ ¹è¿)"
ÀÌ µÇ´Â °ÍÀÔ´Ï´Ù.
´Ù¸¥ ¿¹¸¦ »ìÆìº¸¸é,
int i, *pi, *const cpi = &i;
const int ci = 3, *pci;
À§¿¡¼´Â Á¤¼ö i ¿Í Á¤¼öÇü Æ÷ÀÎÅÍ pi ¸¦ ¼±¾ðÇÕ´Ï´Ù. »ó¼ö Æ÷ÀÎÅÍ cpi ÀÇ °ªÀº
º¯ÇÒ ¼ö ¾ø½À´Ï´Ù; Áï cpi ´Â Ç×»ó °°Àº À§Ä¡¸¦ °¡¸£ÄѾ߸¸ Çϸç, cpi °¡
°¡¸£Å°´Â °÷¿¡ ÀúÀåµÇ´Â °ªÀº º¯ÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¤¼öÇü ci ´Â »ó¼öÀ̰í
(À§¿¡¼Ã³·³ ÃʱâÈ´Â µÇÁö¸¸) °ªÀÌ º¯ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. pci ÀÇ µ¥ÀÌÅÍÇüÀº
"pointer to const int (const int Çü Æ÷ÀÎÅÍ)" À̸ç, pci ÀÚü´Â ´Ù¸¥ Àå¼Ò¸¦
°¡¸£Å°µµ·Ï º¯ÇÒ ¼ö ÀÖÁö¸¸, pci ¸¦ ÅëÇØ¼´Â pci °¡ °¡¸£Å°´Â °÷ÀÇ °ªÀ»
¹Ù²Ü ¼ö ¾ø½À´Ï´Ù.
¢¹ A8.6.2 ¹è¿ ¼±¾ðÀÚ (Array Declarator)
¼±¾ð T D ¿¡¼,
D1 [constant-expression opt]
D °¡ À§¿Í °°Àº ÇüŸ¦ °®°í, ¼±¾ð T D1 ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀÌ "type-modifier
T (T Çüº¯°æÀÚ)" ¶ó¸é, D ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀº "type-modifier array of T
(TÇü ¹è¿ Çüº¯°æÀÚ)" ÀÔ´Ï´Ù. ¸¸¾à »ó¼ö¼ö½ÄÀÌ ÀÖ´Ù¸é, ±× ¼ö½ÄÀº
Á¤¼öÇüÀ̾î¾ß Çϸç, 0 º¸´Ù Ä¿¾ß¸¸ ÇÕ´Ï´Ù. ¹è¿ÀÇ Å©±â (bound) ¸¦ ³ªÅ¸³»´Â
»ó¼ö¼ö½ÄÀÌ »ý·«µÈ´Ù¸é, ¹è¿Àº ºÒ¿ÏÀüÇÑ Çü (incomplete type) ÀÌ µË´Ï´Ù.
¹è¿Àº »ê¼úÇü, Æ÷ÀÎÅÍ, ±¸Á¶Ã¼, °ø¿ëü, ȤÀº (´ÙÂ÷¿ø ¹è¿ÀÇ
°æ¿ì) ´Ù¸¥ ¹è¿À» ¿ä¼Ò·Î °®À» ¼ö ÀÖ½À´Ï´Ù. ¹è¿ÀÇ ¿ä¼Ò´Â ¿ÏÀüÇÑ Çü
(complete type) À̾î¾ß¸¸ ÇÕ´Ï´Ù; Áï ºÒ¿ÏÀüÇÑ ÇüÀ» °®´Â ¹è¿À̳ª ±¸Á¶Ã¼·Î´Â
¹è¿À» ±¸¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ´Â °ð ´ÙÂ÷¿ø ¹è¿¿¡¼ ¿ÀÁ÷ ù¹øÂ° ÷ÀÚ¸¸À»
»ý·«ÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù. ºÒ¿ÏÀüÇÑ ÇüÀÇ ¹è¿Àº ¿ÏÀüÇÑ ´Ù¸¥ ¼±¾ðÀÌ
³ª¿Àµç°¡ (A10.2) ¾Æ´Ï¸é ÃʱâÈ µÊÀ¸·Î½á (A8.7) ¿ÏÀüÇÑ Çü (complete type) ÀÌ µË´Ï´Ù.
¹è¿ÀÇ ¿¹¸¦ µé¸é,
float fa[17], *afp[17];
À§¿Í °°Àº ¼±¾ðÀº float Çü ¼ýÀÚµéÀÇ ¹è¿°ú, float Çü Æ÷ÀÎÅÍÀÇ ¹è¿ (array of
pointer to float) À» ÀǹÌÇÕ´Ï´Ù. ¶ÇÇÑ,
static int x3d[3][5][7];
°ú °°Àº ¼±¾ðÀº 3x5x7 Çà·Ä ÇüÅÂÀÇ Á¤Àû 3Â÷¿ø ¹è¿À» ÀǹÌÇÕ´Ï´Ù. ÀÚ¼¼ÇÏ°Ô ¼³¸íÇϸé,
x3d ´Â 3°³ÀÇ ¿ä¼Ò¸¦ °¡Áö°í ÀÖ½À´Ï´Ù; °¢°¢ÀÇ ¿ä¼Ò´Â °¢°¢ 5°³ÀÇ ¹è¿¸¦ °®°í
ÀÖ´Â ¹è¿ÀÔ´Ï´Ù; ¶Ç 5°³ÀÇ ¹è¿Àº °¢°¢ 7°³ÀÇ Á¤¼ö¸¦ °®´Â ¹è¿ÀÔ´Ï´Ù. x3d,
x3d[i], x3d[i][j], x3d[i][j][k] Áß ¾î¶°ÇÑ Ç¥Çöµµ ¼ö½Ä¿¡ ³ª¿Ã ¼ö ÀÖ½À´Ï´Ù.
óÀ½ 3°³ÀÇ µ¥ÀÌÅÍÇüÀº "¹è¿"À̰í, ¸¶Áö¸· Çϳª¸¸ int ÇüÀÔ´Ï´Ù.
´õ »ó¼¼È÷ ¼³¸íÇϸé, x3d[i][j] ´Â 7°³ÀÇ Á¤¼ö¸¦ °®´Â ¹è¿À̰í, x3d[i] ´Â 7°³ÀÇ
Á¤¼ö¸¦ °®´Â 5°³ÀÇ ¹è¿ÀÇ ¹è¿ÀÔ´Ï´Ù.
¹è¿ÀÇ Ã·ÀÚ¿¬»ê (subscripting operation) E1[E2] ´Â *(E1+E2) ¿Í µ¿ÀÏÇÏ´Ù°í
Á¤ÀǵǾî ÀÖ½À´Ï´Ù. µû¶ó¼ ¸ð¾çÀÌ ÀÌ»óÇÏÁö¸¸, ÷ÀÚ¿¬»êÀº ±³È¯¹ýÄ¢ÀÌ ¼º¸³ÇÏ´Â
¿¬»êÀÔ´Ï´Ù.
 |
 |
¢º ¿ªÀÚ ÁÖ
µû¶ó¼ a °¡ ¹è¿À̰í, i °¡ Á¤¼ö°ªÀ̶ó°í ÇÒ¶§, a[i] »Ó¸¸
¾Æ´Ï¶ó i[a] ¿Í °°Àº ÇüÅÂÀÇ ¹è¿ »ç¿ëµµ °¡´ÉÇÕ´Ï´Ù. a[i] ¿Í
i[a] ´Â °¢°¢ *(a+i) ¿Í *(i+a) ·Î °á±¹ µ¿ÀÏÇÑ °á°ú¸¦ °¡Á®¿É´Ï´Ù. |
|
 |
 |
+ ¿¬»êÀÚ¿Í ¹è¿¿¡ Àû¿ëµÇ´Â º¯È¯±ÔÄ¢ (A6.6, A7.1, A7.7) ¶§¹®¿¡, E1 ÀÌ ¹è¿À̰í
E2 °¡ Á¤¼öÇüÀ̶ó¸é, E1[E2] ´Â E1 ÀÇ E2 ¹øÂ° ¿ä¼Ò¸¦ ÂüÁ¶ÇÕ´Ï´Ù.
¿¹¸¦ µé¸é, x3d[i][j][k] ´Â *(x3d[i][j] + k) ¿Í µ¿ÀÏÇÕ´Ï´Ù. ù¹øÂ° ºÎ¼ö½ÄÀÎ
x3d[i][j] ´Â A7.1 ¿¡¼ ¼³¸íÇÑ ±ÔÄ¢¿¡ ÀÇÇØ "Á¤¼öÇü ¹è¿À» °¡¸£Å°´Â Æ÷ÀÎÅÍ"·Î
º¯È¯µË´Ï´Ù; A7.7 Àý¿¡¼ ¼³¸íÇßµíÀÌ, µ¡¼À(+)Àº ¹è¿À» ±¸¼ºÇÏ´Â Á¤¼öÇüÀÇ Å©±â¿¡
°öÇÑ °ªÀ» ´õÇÏ°Ô µË´Ï´Ù. ¹è¿Àº Çà (row) ´ÜÀ§·Î ÀúÀåµÇ¸ç (µû¶ó¼ ¸¶Áö¸·
÷ÀÚ°¡ °¡Àå »¡¸® º¯ÇÕ´Ï´Ù), ¼±¾ð¿¡¼ÀÇ Ã¹¹øÂ° ÷ÀÚ´Â ±× ¹è¿¿¡ ÀÇÇØ ¼ÒºñµÇ´Â
±â¾ïÀå¼ÒÀÇ ¾çÀ» °áÁ¤Çϴµ¥ µµ¿òÀ» ÁÙ »Ó, ÷ÀÚ°è»ê¿¡ Âü¿©ÇÏÁö´Â ¾Ê½À´Ï´Ù.
 |
 |
¢º ¿ªÀÚ ÁÖ
¹è¿ÀÇ Ã¹¹øÂ° ÷ÀÚ´Â ¼ö½ÄÀÇ °ªÀ» °áÁ¤Çϴµ¥ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
ÀÌ´Â ¹è¿¿¬»êÀÇ Á¤Àǰ¡ Æ÷ÀÎÅÍ ¿¬»êÀε¥¼ ¿¬À¯ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é,
1Â÷¿ø ¹è¿¿¡¼, ¾î¶°ÇÑ ¿ä¼Ò¿¡ ÀúÀåµÈ °ªÀ» ¾Ë±â À§Çؼ ¹è¿ÀÇ Å©±â°¡
¾ó¸¶ÀÎÁö (¡æ ù¹øÂ° ÷ÀÚÀÇ ÀǹÌ) ¾Ë Çʿ䰡 ¾ø½À´Ï´Ù. ÀÌ´Â ´ÙÂ÷¿ø
¹è¿¿¡¼µµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. ´ÙÂ÷¿ø ¹è¿¿¡¼µµ, ¾î¶°ÇÑ ¿ä¼ÒÀÇ °ªÀ»
¾Æ´Âµ¥´Â ù¹øÂ° ÷ÀÚ¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö ÷ÀÚ¸¸ ÀÖÀ¸¸é µË´Ï´Ù. |
|
 |
 |
¢¹ A8.6.3 ÇÔ¼ö ¼±¾ðÀÚ (Function Declarator)
Çö´ëÀû ¹æ½Ä (new-style) ÀÇ ÇÔ¼ö¼±¾ð T D ¿¡¼,
D1 (parameter-type-list)
D °¡ À§¿Í °°Àº ÇüŸ¦ °®°í, ¼±¾ð T D1 ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀÌ "type-modifier
T (T Çüº¯°æÀÚ)" ¶ó¸é, D ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀº "type-modifier function
with arguments parameter-type-list returning T (¸Å°³º¯¼ö-µ¥ÀÌÅÍÇü-¸®½ºÆ®¸¦
ÀÎÀÚ·Î °®°í TÇüÀ» ¹ÝȯÇÏ´Â ÇÔ¼ö Çüº¯°æÀÚ)" ÀÔ´Ï´Ù.
¸Å°³º¯¼ö (parameter) ÀÇ ¹®¹ýÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
parameter-type-list:
parameter-list
parameter-list , ...
parameter-list:
parameter-declaration
parameter-list , parameter-declaration
parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declarator opt
|
Çö´ëÀû ¹æ½ÄÀÇ ¼±¾ð¿¡¼, ¸Å°³º¯¼ö ¸®½ºÆ® (parameter list) ´Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇüÀ»
¾Ë·ÁÁÝ´Ï´Ù. Çö´ëÀû ¹æ½ÄÀÇ ÇÔ¼ö ¼±¾ðÀÚ°¡ ¸Å°³º¯¼ö¸¦ °¡Áö°í
ÀÖÁö ¾Ê´Ù¸é, ¸Å°³º¯¼ö µ¥ÀÌÅÍÇü ¸®½ºÆ® (prarmeter type list) ¿¡´Â void ¶ó´Â
Ű¿öµå¸¸ ³ª¿É´Ï´Ù. ¸¸¾à ¸Å°³º¯¼ö µ¥ÀÌÅÍÇü ¸®½ºÆ®°¡ »ý·«ºÎÈ£ ", ..." ·Î
³¡³´Ù¸é, ±× ÇÔ¼ö´Â ÁÖ¾îÁø ¸Å°³º¯¼öÀÇ °³¼öº¸´Ù ´õ ¸¹Àº ÀÎÀÚ¸¦ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.
(A7.3.2 Âü°í)
¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇüÀÌ ÇÔ¼ö³ª ¹è¿À̶ó¸é, A10.1 Àý¿¡¼ ¼³¸íÇÒ ¸Å°³º¯¼ö
º¯È¯ (parameter conversion) ±ÔÄ¢¿¡ ÀÇÇØ Æ÷ÀÎÅÍ·Î º¯È¯µË´Ï´Ù. ¸Å°³º¯¼öÀÇ
¼±¾ð ÁöÁ¤ÀÚ (declaration specifier) ¿¡ Çã¶ôµÇ´Â ±â¾ïºÎ·ù ÁöÁ¤ÀÚ´Â register
»ÓÀ̸ç, ÀÌ·¯ÇÑ ÁöÁ¤ÀÚ´Â ¼±¾ðÀÚ°¡ ÇÔ¼öÁ¤ÀÇ (function definition) ºÎºÐ¿¡ ³ª¿ÀÁö
¾Ê´Â ÀÌ»óÀº ¹«½ÃµË´Ï´Ù.
 |
 |
¢º ¿ªÀÚ ÁÖ
ÇÔ¼öÀÇ Á¤ÀǺκп¡¼ ¸Å°³º¯¼ö¿¡ register ÁöÁ¤ÀÚ¸¦ ÁÖÁö¾Ê´Â
ÀÌ»ó, ¾Æ¹«¸® ÇÔ¼ö ¼±¾ð¿¡ register ÁöÁ¤ÀÚ¸¦ Áشٰí ÇØµµ
±× ÁöÁ¤ÀÚ´Â ¹«½ÃµÈ´Ù´Â ÀǹÌÀÔ´Ï´Ù. |
|
 |
 |
À¯»çÇϰÔ, ¸Å°³º¯¼ö ¼±¾ð¿¡ ÀÖ´Â ¼±¾ðÀÚ°¡ ¸íĪÀ» Æ÷ÇÔÇϰí ÀÖ°í, ÇÔ¼ö ¼±¾ðÀÚ°¡
ÇÔ¼öÁ¤ÀÇ ºÎºÐ¿¡ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó¸é, ±× ¸íĪÀº Áï½Ã Åë¿ë¹üÀ§ (scope) ¸¦ ºüÁ®³ª°¡°Ô
µË´Ï´Ù.
 |
 |
¢º ¿ªÀÚ ÁÖ
Áï, ÇÔ¼öÁ¤Àǰ¡ ¾Æ´Ñ ÇÔ¼ö¼±¾ð¿¡ ³ª¿À´Â ¸íĪÀÇ Åë¿ë¹üÀ§´Â
¸Å°³º¯¼ö¸¦ µÑ·¯½Î°í ÀÖ´Â °ýÈ£¿¡¼ ³¡³´Ù´Â ÀǹÌÀÔ´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ,
ÇÔ¼ö ¼±¾ð¿¡¼ a ¶ó´Â ¸íĪÀ» »ç¿ëÇß´Ù°í ÇØµµ, ÀÌ ¸íĪÀÌ ÇÔ¼öÁ¤ÀÇ¿¡¼
»ç¿ëµÈ °ÍÀÌ ¾Æ´Ï¹Ç·Î ¸Å°³º¯¼ö ¸®½ºÆ®¸¦ ´Ý´Â °ýÈ£¿¡¼ ±× Åë¿ë¹üÀ§°¡
³¡³ª´Â °ÍÀÔ´Ï´Ù.
int func(int a);
double a;
ÇÔ¼ö func ÀÇ ¼±¾ð¿¡¼ »ç¿ëµÈ a ¶ó´Â ¸íĪÀÇ Åë¿ë¹üÀ§´Â ´Ý´Â °ýÈ£ ) ¿¡¼
³¡³ª±â ¶§¹®¿¡, ¾Æ·¡¿¡ ÀÖ´Â double Çü a ¿¡°Ô ¿µÇâÀ» ÁÖÁö ¾Ê½À´Ï´Ù.
int func(int a, int a); /* ºÒ°¡´É */
´Ü À§¿¡¼ º¸´Â °Íó·³, ¼±¾ð¿¡¼ÀÇ Áߺ¹µÈ ¸íĪ »ç¿ëÀº ºÐ¸í a ÀÇ Åë¿ë¹üÀ§°¡
³¡³ªÁö ¾ÊÀº »óÅ¿¡¼ ³ª¿Â °ÍÀ̹ǷΠºÒ°¡´ÉÇÕ´Ï´Ù.
¹Ý¸é¿¡, ÇÔ¼öÁ¤ÀÇ¿¡¼ »ç¿ëµÈ ¸Å°³º¯¼öÀÇ ¸íĪÀº ÇÔ¼ö º»Ã¼ (body)
ÀÇ °¡Àå ÀºÎºÐ¿¡¼ ¼±¾ðµÈ °ÍÀ¸·Î º¸±â ¶§¹®¿¡ ÇÔ¼ö Àüü¿¡ °ÉÃÄ
Åë¿ë¹üÀ§°¡ Àû¿ëµË´Ï´Ù.
ÇÔ¼ö¼±¾ð°ú Á¤ÀÇ¿¡ »ç¿ëµÈ ¸íĪ¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ »çÇ×Àº ³ªÁß¿¡
¶Ç ´Ù·ç°Ô µË´Ï´Ù. |
|
 |
 |
¸íĪÀÌ ³ª¿ÀÁö ¾Ê´Â Ãß»óÀû (abstract) ¼±¾ðÀÚ´Â A8.8 Àý¿¡¼ ¼³¸íÇÕ´Ï´Ù.
°íÀüÀûÀÎ ¹æ½Ä (old-style) ÀÇ ÇÔ¼ö¼±¾ð T D ¿¡¼,
D1 (identifier-list opt)
D °¡ À§¿Í °°Àº ÇüŸ¦ °®°í, ¼±¾ð T D1 ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀÌ "type-modifier
T (T Çüº¯°æÀÚ)" ¶ó¸é, D ¿¡ ÀÖ´Â ¸íĪÀÇ µ¥ÀÌÅÍÇüÀº "type-modifier function
of unspecified arguments returning T (ÀÎÀÚÀÇ Á¤º¸°¡ ÁÖ¾îÁöÁö ¾Ê°í, TÇüÀ» ¹ÝȯÇÏ´Â
ÇÔ¼ö Çüº¯°æÀÚ)" ÀÔ´Ï´Ù. ¸Å°³º¯¼ö°¡ ÀÖ´Ù¸é ´ÙÀ½°ú °°Àº Çü½ÄÀ» °®½À´Ï´Ù.
identifier-list:
identifier-list
identifier-list , identifier
|
°íÀüÀû ¹æ½ÄÀÇ ¼±¾ðÀÚ¿¡¼, ±× ¼±¾ðÀÚ°¡ ÇÔ¼öÁ¤ÀÇ (A10.1) ºÎºÐ¿¡ ÀÖ´Â °ÍÀÌ
¾Æ´Ï¶ó¸é ¸íĪ ¸®½ºÆ® (identifier list) ´Â ¾ø¾î¾ß¸¸ ÇÕ´Ï´Ù. ¸Å°³º¯¼öÀÇ
µ¥ÀÌÅÍÇü¿¡ ´ëÇÑ ¾î¶°ÇÑ Á¤º¸µµ ¼±¾ð¿¡ ÀÇÇØ ÁÖ¾îÁöÁö ¾Ê½À´Ï´Ù.
¿¹¸¦ µé¾î,
int f(), *fpi(), (*pfi)();
À§¿Í °°Àº ¼±¾ðÀº Á¤¼ö¸¦ ¹ÝȯÇÏ´Â ÇÔ¼ö f, Á¤¼öÇü Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ´Â ÇÔ¼ö fpi,
Á¤¼ö¸¦ ¹ÝȯÇÏ´Â ÇÔ¼ö¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ pfi ¸¦ ÀǹÌÇÕ´Ï´Ù. À§ÀÇ ¼±¾ð¿¡´Â
¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇü¿¡ ´ëÇÑ »çÇ×ÀÌ ÀüÇô ¾ø½À´Ï´Ù; Áï À§ÀÇ ¼±¾ðÀº °íÀüÀû
¹æ½ÄÀÔ´Ï´Ù.
´ÙÀ½°ú °°Àº Çö´ëÀû ¹æ½ÄÀÇ ¼±¾ð¿¡¼´Â,
int strcpy(char *dest, const char *source), rand(void);
strcpy ´Â ¹®ÀÚÇü Æ÷ÀÎÅÍ¿Í ¹®ÀÚ »ó¼öÇü Æ÷ÀÎÅÍ (pointer to constant character)
¸¦ ÀÎÀÚ·Î °®°í, int ÇüÀ» ¹ÝȯÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù. ÇÔ¼ö¼±¾ð¿¡¼ ¸Å°³º¯¼öÀÇ À̸§Àº
½ÇÁ¦·Î´Â ÁÖ¼®¿¡ ºÒ°úÇÕ´Ï´Ù. µÎ¹øÂ° ÇÔ¼ö rand ´Â ÀÎÀÚ°¡ ¾øÀ¸¸ç, int ÇüÀ»
¹ÝȯÇÕ´Ï´Ù.
| |
¸Å°³º¯¼öÀÇ ¿øÇü (prototype) À» °®´Â ÇÔ¼ö ¼±¾ðÀÚ´Â
ANSI Ç¥ÁØ¿¡ ÀÇÇÑ º¯ÈÁß °¡Àå Áß¿äÇÑ °ÍÀÔ´Ï´Ù. ¹°·Ð µÎ ¹æ½ÄÀ» ¸ðµÎ ¼ö¿ëÇØ¾ß¸¸ ÇÏ´Â
Çʿ伺°ú ¼Ò°³Çϴµ¥ µû¸£´Â ¾î·Á¿òÀÌ ÀÖ±â´Â ÇÏÁö¸¸, Çö´ëÀû ¹æ½ÄÀÇ ¼±¾ðÀº ÃÊÆÇ¿¡¼ ¼³¸íÇß´ø
°íÀüÀû ¹æ½Ä°ú ºñ±³ÇØ, ÇÔ¼öÈ£Ãâ¿¡ Àü´ÞÇÏ´Â ÀÎÀÚÀÇ °Á¦º¯È¯°ú ¿¡·¯°Ë»ç °°Àº ÀÌÁ¡À»
Á¦°øÇÕ´Ï´Ù. µÎ ¹æ½ÄÀÇ È£È¯¼ºÀ» À§ÇØ, ¸Å°³º¯¼ö°¡ ¾ø´Â Çö´ëÀû ¹æ½ÄÀÇ ÇÔ¼ö¼±¾ð¿¡´Â
void ¶ó´Â ¸í¹éÇÑ Ç¥½Ã°¡ ÇÊ¿äÇÏ´Ù´Â º¸±â½ÈÀº ¹®¹ýÀÌ ÇÊ¿äÇØ Áý´Ï´Ù.
°¡º¯ÀÎÀÚ ÇÔ¼ö (variadic function) ¸¦ À§ÇÑ »ý·«ºÎÈ£ ", ..." ´Â Ç¥ÁØÇì´õ
<stdarg.h> ¿¡ ÀÖ´Â ¸ÅÅ©·Î¿Í ÇÔ²² »õ·Î¿î °ÍÀ̸ç, ±×µ¿¾È °ø½ÄÀûÀ¸·Î´Â ±ÝÁöµÇ¾î
ºñ°ø½ÄÀûÀ¸·Î »ç¿ëµÇ´ø °¡º¯ÀÎÀÚ ±â¼úÀ» Á¤½ÄÀ¸·Î ¹Þ¾ÆµéÀÌ´Â °ÍÀÔ´Ï´Ù.
ÀÌ·¯ÇÑ Ç¥±â¹ýµéÀº C++ ·ÎºÎÅÍ ¹ÞÀº °ÍÀÔ´Ï´Ù. |
|