#21 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ1-1: ±â¾ïºÎ·ùÀÇ Á¤º¹ 03/06 00:10 191 line ÀÛ¼º ¿¬¿ùÀÏ: 1989.7.24~7.26 ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1989.9 HWP/TXT º¯È¯: 1993.3.5 >>> Á¤º¹ Åͺ¸ C <<< Á¦1ȸ ±â¾ïºÎ·ù(storage class)ÀÇ Á¤º¹ ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú3) --------------------------------------------------------------------- 1 º»·Ð¿¡ ¾Õ¼­ --------------------------------------------------------------------- ¿ä»çÀÌ C ¾ð¾î°¡ ¹«½¼ Àü¿°º´À̳ª µÈµÔÀÌ ÇÑâ ÆÛÁö°í ÀÖ´Ù. ÄÄÇ»ÅÍ ¾ð¾î¸¦ Á» ¾È´ä½Ã´Â »ç¶÷Ä¡°í ÁÖÀ§¿¡¼­ ÀÌ»¡¿¡ ÈûÁÖ°í ³»¹ñ´Â "¾¾-ÀÌ"¶ó´Â ¼Ò¸®¸¦ µé¾îº¸Áö ¾ÊÀº »ç¶÷Àº ¾øÀ» °ÍÀÌ´Ù. ÄÄÇ»ÅÍ ¾ð¾î Áß¿¡¼­ ´õ ÀÌ»ó °£´ÜÇÒ ¼ö ¾ø´Â À̸§À» °¡Áø C´Â, °í±Þ ¾î¼Àºí·¯¶ó°í ºÒ¸±¸¸Å­ ¾ð¾î ÀÚü ·Î ºÁ¼­µµ ºñ±³Àû ÄÞÆÑÆ®ÇÏ´Ù. ±×·¸´Ù¸é °ú¿¬ ¹¹°¡ ±×¸® ÁÁ±æ·¡ ³Êµµ³ªµµ C¸¦ ¹è¿ì°í ½Í¾îÇϴ°¡? ±×·³¿¡µµ ºÒ±¸ÇÏ°í ³Êµµ³ªµµ C°¡ ¾î·Æ´Ù°í ÇÐÀ» ¶¼´Â ÀÌÀ¯´Â µµ´ëü ¾îµð¿¡ Àִ°¡? ±× ÀÌÀ¯¿Í ÇØ°á ¹æ¹ýÀ» µü »Ñ·¯Áö°Ô ¹àÈûÀ¸·Î½á ³ë·ÂÇÏ´Â ÀÚ, ±× ´©±¸µç C ¾ð¾î¿¡ µµÅëÇÒ ¼ö ÀÖ´Â ±æÀ» ¾ÕÀ¸·Î µ¶ÀÚ ¿©·¯ºÐ²² ¸íÈ®È÷ Á¦½ÃÇÏ°íÀÚ ÇÑ´Ù. ¿©·¯ºÐÀº Åͺ¸ Åø¹Ú½º ½Ã¸®ÁîÀ» ±â¾ïÇÏ´ÂÁö ¸ð¸£°Ú´Ù. Áö³­ '89.4¿ùÈ£ ¸¦ ¸¶Áö¸·À¸·Î ±× ½Ã¸®Áî°¡ ¸¶°¨µÇ¾ú´Âµ¥, ±× ÀÌÈÄ 5¿ùÈ£¿¡ Àá±ñ À̸§À» ³»ºñÄ£ ´ÙÀ½¿¡ ÇÊÀÚ´Â ¸¶¼Ò¿¡¼­ ¼ÕÀ» ¶¼°í °¨°¨ ¹«¼Ò½ÄÀÌ µÇ¹ö·È´Ù. ±×°£ ÇÊÀÚ´Â ¸¶¼Ò¸¦ Àá½Ã ¸Ö¸®ÇÏ°í ¹æ¾È¿¡ ²Ç²Ç Ʋ¾î ¹ÚÇô¼­ Ĩ°ÅÇÏ°í ÀÖ¾ú´Ù. ±×·¯¸é¼­ ¹º°¡¸¦ ¿­½ÉÈ÷ ²þ²þ´ë¸ç ¿¬±¸ÇÏ°í ÀÖ¾ú´Âµ¥, ±×°Ô ¹Ù·Î "Åͺ¸ C Á¤º¹ÀÇ ±æ"À̾ú´Ù. ÀÌÁ¦ ±× ¿¬±¸°¡ °ÅÀÇ ¸¶¹«¸®µÇ¾î °¡½ÃÀûÀÌ°í ¹¬Á÷ÇÑ ¸ð Á¾ÀÇ °á½Ç·Î ¸Î¾îÁú Âû¶ó¿¡ ÀÖ´Ù. ±×·¡¼­ ±× °á½Ç Áß¿¡¼­µµ ¾ËÂ¥¸¸À» °ñ¶ó ÇÑÁ¤µÈ Áö¸éÀ» ºô¾î ¸¶¼Ò µ¶ÀÚ ¿©·¯ºÐ°ú ¿ì¼±ÀûÀ¸·Î ³ª´² ¸Ô°íÀÚ ÇÑ´Ù. ±× ·¯¸é ÀÏ´Ü ÀÌ ±ÛÀÇ ¼öÁØ°ú ¼º°ÝºÎÅÍ ºÐ¸íÈ÷ ¤°í ³Ñ¾î°¡±â·Î ÇÏÀÚ. C Á¤º¹ÀÇ ±æÀ» ¾Æ·¡¿Í °°ÀÌ 5´Ü°è·Î ³ª´²º¸¸é, Á¦2´Ü°è "±â¾ïºÎ·ùÀÇ ±¸ºÐ"¿¡¼­ Ãâ¹ßÇÏ¿© Á¦3´Ü°è "Æ÷ÀÎÅÍÀÇ ¿ÏÀü Á¤º¹"À» ÀÌ·ëÀ¸·Î½á Á¦4´Ü°è ÀÇ Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öµéÀ» ÃæºÐÈ÷ È°¿ëÇÒ ¼ö ÀÖ´Â ±âÃÊ ´É·ÂÀ» ¹è¾çÇÑ ´Ù´Â °ÍÀÌ ÀÌ ±ÛÀÇ ÃÖÁ¾ ¸ñÇ¥°¡ µÇ°Ú´Ù(Á¦5´Ü°è´Â ³¯°í ±â´Â µµ»çµéÀ̳ª ÀÔ¹®ÇÏ´Â °úÁ¤À̹ǷΠº¸Åë »ç¶÷¿¡°Ô´Â ÇØ´ç »çÇ×ÀÌ ¾ø´Ù). --------------------------------------------------------------------- Á¦1´Ü°è º¯¼ö, »ó¼ö, µ¥ÀÌÅÍÇü, ¸ÅÅ©·Î »ó¼ö, ¿¬»êÀÚ, °£´ÜÇÑ ¹®ÀÚ¿­ Ãë±Þ¹ý, Á¦¾î¹®°ú ·çÇÁ, ÇÔ¼ö ÀÛ¼º¹ý Á¦2´Ü°è ±â¾ïºÎ·ù(storage class)ÀÇ ±¸ºÐ, ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏ, Àü󸮱â(preprocessor)¿Í ¸ÅÅ©·Î ÇÔ¼ö Á¦3´Ü°è Æ÷ÀÎÅÍ, ±¸Á¶Ã¼(structure) Á¦4´Ü°è Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö Á¦5´Ü°è ¸Þ¸ð¸® ¸ðµ¨, È¥ÇÕ ¾ð¾î ÇÁ·Î±×·¡¹Ö --------------------------------------------------------------------- ±× ´ÙÀ½À¸·Î CÀÇ Ãʺ¸ÀÚµéÀÌ C¸¦ °øºÎÇÏ´Ù°¡ °á±¹ C¸¦ Æ÷±âÇÏ´Â µ¥±î ÁöÀÇ ½Ã³ª¸®¿À¸¦ »ìÆ캸¸é ´ëÃæ ÀÌ·¸´Ù. ¸ÕÀú Á¦1´Ü°è´Â ³ª¹«¶ö µ¥ ¾øÀÌ ÀÇ¿åÀûÀ¸·Î ¿­½ÉÈ÷ µ¶ÆÄÇØ ³ª°£´Ù. ÀÌ ´Ü°è´Â ´Ù¸¥ ¾ð¾î¸¦ °øºÎÇÏ´Â ¹æ½Ä °ú º°¹Ý ´Ù¸¦ °ÍÀÌ ¾øÀ¸¹Ç·Î ´ëºÎºÐÀÇ ³ë·ÂÇÏ´Â Ãʺ¸ÀÚµéÀº Å« ¾î·Á¿ò ¾ø ÀÌ ³¡¸¶Ä£´Ù. ±×·¯´Ù°¡ Á¦2´Ü°è·Î Á¢¾îµé¸é¼­ ¿Õ¼ºÇÏ´ø ÀÇ¿åÀº ¾à°£ÀÇ µ¿¿ä¿Í ÇÔ²² Á¡Â÷·Î Èçµé¸®±â ½ÃÀÛÇÑ´Ù. ±â¾ïºÎ·ù¸¦ À§½ÃÇؼ­ Àü󸮱â¿Í ¸ÅÅ©·Î ÇÔ¼ö µîµî ¹Ù¾ßÈå·Î C¸¦ Ư¡Áþ´Â »ý¼ÒÇÑ °³³äµéÀÌ ¿©±âÀú±â¼­ ½¯ »õ ¾øÀÌ Æ¢¾î ³ª¿À±â ¶§¹®ÀÌ´Ù. ÀÌ·¸°Ô Èçµé°Å¸®´ø ÀÇ¿åÀº Á¦3´Ü°è Æ÷ÀÎÅÍ·Î Á¢¾îµé¸é¼­ ¿ÏÀüÈ÷ ÈÖû °Å¸®°Ô µÈ´Ù. "µµ´ëü ¹» ÁÖÀåÇÏ´Â °ÇÁö Çϳªµµ ¸ð¸£°Ú´Ù"°í Åõ´úÅõ´ú´ë´Â ¼Ò¸®¸¦ Ã¥ ÇÑ ÆäÀÌÁö ³Ñ¾î°¡±â°¡ ¹«¼·°Ô ¿¬¹ß ¶Ç ¿¬¹ßÇÑ´Ù. °á±¹¿¡ °¡¼­´Â óÀ½¿¡ ±×·¸°Ôµµ ¿Õ¼ºÇÏ´ø ÀÇ¿åÀÌ Æ÷ÀÎÅÍÀÇ ¼ö··¿¡¼­ ¹«ÂüÈ÷ ÁÂÃÊ´çÇÏ°í ¸¸´Ù. ¹°·Ð ±¸Á¶Ã¼ °°Àº °Ç °Ç³Ê ¶Ù±â°¡ ¹Ù»Ú´Ù. ¾Æ¹«¸® ³ë·ÂÇصµ, °ñ¹é¹ø Àо ÀÌÇØ°¡ ¾È °¡´Â µ¥´Â º° ¼ö°¡ ¾ø´Â °ÍÀÌ´Ù. ÀÌó·³ C¿¡¼­ °¡Àå ³­ÇØÇÑ ºÎºÐÀÎ Á¦3´Ü°è¿¡¼­ ÁÂÃÊÇÔÀ¸·Î½á Á¦4´Ü°è ÀÇ ¸·°­ÇÑ Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öµéÀ» Á¦´ë·Î ½á¸Ô¾î º¸Áöµµ ¸øÇÏ°í, "³ªÇÑ Å× C´Â µµÀúÈ÷ ¾È µÇ°Ú¾î!"¶ó°í ü³äÇϸ鼭 Áßµµ Æ÷±âÇÏ°Ô µÇ´Â °ÍÀÌ´Ù. ¼ÖÁ÷È÷ ¸»Çؼ­ Á¦3´Ü°èÀÇ Æ÷ÀÎÅÍ ºÎºÐ¿¡¼­ ÁÂÃÊÇÏ°Ô µÇ´Â ÀÌÀ¯·Î¼­ ½ÃÁß¿¡ ³ª¿Â C ÀÔ¹®¼­ÀÇ Ã¥ÀÓµµ °áÄÚ ÀÛ´Ù°í ÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÀϺΠC ÀÔ¹®¼­ µéÀÌ, ±Ø´ÜÀûÀ¸·Î ¸»Çؼ­, °¡Àå ³­ÇØÇÑ ºÎºÐÀ» °¡Àå °£´ÜÇÏ°Ô "¿ä¾à"Çعö ¸®´Â ¼ö°¡ ¿Õ¿Õ Àֱ⠶§¹®ÀÌ´Ù. ¾î·µç ÀÌ ±ÛÀº ¾Õ¼­ ¾ê±âÇÑ °Íó·³ Á¦3´Ü°è¿¡¼­ ÁÂÃÊÇÑ »ç¶÷À» À§ÇÑ ÀÏÁ¾ÀÇ "ÆÐÀÚºÎÈ°Àü"À» ¿°µÎ¿¡ µÎ°í Á¦2´Ü°èºÎÅÍ ½á³ª°¥ »ý°¢ÀÌ´Ù. ´Ù½Ã ¸»Çؼ­ ÀÌ ±ÛÀº, C¸¦ °øºÎÇÏ´Ù°¡ Áßµµ¿¡¼­ Æ÷±âÇÑ »ç¶÷À̳ª ÀÏ´Ü ÇÑ ¹ø C ¸¦ Àü¹ÝÀûÀ¸·Î ÈȾîºÃÁö¸¸ ¾ÆÁ÷µµ ¹º°¡ ±ú¸²Á÷ÇÏ¿© µµÅë °¨ÀÌ ¾È ÀâÈ÷´Â »ç¶÷À» ÁÖµÈ ´ë»óÀ¸·Î ÇÑ´Ù. ±×·¯¹Ç·Î ÀÌ ±ÛÀº Àý´ë·Î Ãʺ¸ÀÚ¸¦ À§ÇÑ °ÍÀÌ ¾Æ´Ï´Ù. ÀÚ½ÅÀÌ Ãʺ¸ÀÚ¶ó°í »ý°¢ÇÏ´Â »ç¶÷Àº Áö±Ý±îÁö ¸¶¼Ò¿¡ ¿¬ÀçÇÑ C ÀÔ ¹® ±â»ç ¶Ç´Â ½ÃÁß¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Â C ÀÔ¹®¼­¸¦ °¡Áö°í ÃÖ¼ÒÇÑ Á¦1´Ü°è Á¤µµ´Â °øºÎÇØÁÖ¼Å¾ß ÇÒ °ÍÀÌ´Ù. --------------------------------------------------------------------- 2 ANSI C¿Í pre-ANSI C --------------------------------------------------------------------- ÇÑÆí ÀÌ ±Û¿¡¼­ »ç¿ëÇÏ´Â C ÄÄÆÄÀÏ·¯·Î¼­ Áö¸íµµ°¡ ³ôÀº º¼·£µå»çÀÇ Åͺ¸ C¸¦ ¾²±â·Î ÇÑ´Ù. ±×°ÍÀº ÀϹÝÀûÀÎ À¯´Ð½º C¿¡ ´ëÇØ ¼³¸íÇÏ´Â °Íº¸´Ù IBM-PC¿¡¼­ µ¹¾Æ°¡´Â ƯÁ¤ ÄÄÆÄÀÏ·¯¸¦ ´ë»óÀ¸·Î ÇÑÁ¤ÇÏ´Â °ÍÀÌ º¸´Ù Á¤È® ÇÏ°í ¸íÈ®ÇÑ ¼³¸íÀ» Çϴµ¥ Å« ÀÕÁ¡À» °¡Á®´Ù Áֱ⠶§¹®ÀÌ´Ù. ±×¸®°í Åͺ¸ C´Â ¸î ³â Àü¿¡ Á¤¸³µÈ ANSI C ¼³°è Ç¥ÁØ(´õ¿í »õ·Î¿ÍÁø C ±Ô°ÝÀ̶ó°í »ý°¢ÇÏ¸é µÊ)À» Ãæ½ÇÇÏ°Ô µû¸£±â ¶§¹®¿¡ ÀÌ ±Ûµµ ANSI C¸¦ ¹ÙÅÁÀ¸·Î ÇÏ¿© ¿¹Á¦³ª ±âŸ ¸ðµç ¼³¸íÀ» À̲ø¾î ³ª°¥ ÀÛÁ¤ÀÌ´Ù. µû¶ó¼­ AN SI C¸¦ À§ÁÖ·Î ÇÏÁö ¾ÊÀº C ÀÔ¹®¼­¸¦ ÀÐÀº µ¶ÀÚ´Â ANSI CÀÇ »õ·Î¿î ÇÔ¼ö Á¤ÀÇ ¹æ½Ä µîµî ¿©·¯°¡Áö ¸é¿¡¼­ ¾à°£ÀÇ »ý¼ÒÇÔÀÌ ÀÖÀ»Áö ¸ð¸£°Ú´Âµ¥, ±× °ÍÀº ¾î´À Á¤µµ ½Ã°£ÀÌ È帣´Ù º¸¸é ´«¿¡ ÀÍÀ» Å״ϱî Å« °ÆÁ¤À» ÇÏÁö ¾Ê ¾Æµµ µÇ¸®¶ó º»´Ù. ¿ì¼± ±ÞÇÑ´ë·Î ANSI C¿Í pre-ANSI C(ANSI Ç¥ÁØÀÌ ³ª¿À±â ÀüÀÇ C) °£ÀÇ Â÷ÀÌÁ¡ Áß °¡Àå ´«¿¡ ¶ç´Â Â÷ÀÌÁ¡ ¼¼°¡Áö¸¸ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ù¹ø°·Î AN SI C¿¡¼­´Â void ÇÔ¼ö¶ó´Â °ÍÀ» Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î main ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ ·Á¸é pre-ANSI C¿¡¼­´Â ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù. main ÇÔ¼ö´Â ¸Å°³º¯¼ö¿Í ¸®ÅÏ°ª ÀÌ ¾øÀ¸¹Ç·Î, main() { ...... } ¶ó°í ÇÑ´Ù. ±×·¯³ª ANSI C¿¡¼­´Â void¶ó´Â Å°¿öµå¸¦ ½á¼­ ¾Æ·¡¿Í °°ÀÌ ³ª Ÿ³½´Ù. +-------------------- ¸®ÅÏ°ªÀÌ ¾øÀ½À» ³ªÅ¸³½´Ù. | void main(void) { | ...... +----------- ¸Å°³º¯¼ö°¡ ¾øÀ½À» ³ªÅ¸³½´Ù. } ±× ´ÙÀ½À¸·Î ANSI C¿¡¼­´Â ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®¸¦ ÇÔ¼ö¸í ´ÙÀ½ÀÇ °ýÈ£¾È¿¡ ±â¼úÇϴ Ư¡ÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î µÎ ¸Å°³º¯¼öÀÇ °ªÀ» ±³È¯ÇØÁÖ ´Â swap ÇÔ¼ö¸¦ ÀÛ¼ºÇغ¸ÀÚ. --------------------------------------------------------------------- pre-ANSI C ANSI C --------------------------------------------------------------------- °¢ ¸Å°³º¯¼ö¸¶´Ù µ¥ÀÌÅÍÇüÀ» µû·Î ÁöÁ¤ +----------+ swap(pa, pb) +--- void swap(double *pa, double *pb) double *pa, *pb; | { +--------------------+ { | double temp; ¸Å°³º¯¼ö ¸®½ºÆ®¶ó°í ºÎ¸§ double temp; | | temp = *pa; temp = *pa; | *pa = *pb; *pa = *pb; | *pb = temp; *pb = temp; | } } | +--- ÀÌ ºÎºÐÀ» ÇÔ¼ö ¿øÇüÀ̶ó ºÎ¸¥´Ù. --------------------------------------------------------------------- ¿À¸¥ÂÊ°ú °°ÀÌ ¸Å°³º¯¼ö ¸®½ºÆ®¸¦ ÁöÁ¤ÇÏ´Â ¹æ½ÄÀÇ ÀåÁ¡Àº ÇÔ¼ö¸¦ È£ ÃâÇßÀ» ¶§ ÄÄÆÄÀÏ·¯°¡ ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇüÀ» °Ë»çÇØÁشٴ °ÍÀÌ´Ù. ¿¹ÄÁ ´ë doubleÇü º¯¼ö a, bÀÇ °ªÀ» ±³È¯Çϱâ À§ÇØ, swap(&a, &b); ¶ó°í ÇÒ°ÍÀ» ½Ç¼ö·Î ¹øÁö ¿¬»êÀÚ &¸¦ ºü¶ß·Á¼­, swap(a, b); ¶ó°í Çϸé ANSI C¿¡¼­´Â ¿¡·¯°¡ ¹ß»ýÇÏÁö¸¸, pre-ANSI C¿¡¼­´Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇü °Ë»ç¸¦ ÇàÇÏÁö ¾ÊÀ¸¹Ç·Î ¿¡·¯°¡ ÀüÇô ¹ß»ýÇÏÁö ¾ÊÀ¸¸ç µû¶ó¼­ ½É °¢ÇÑ ¹ú·¹(bug)°¡ µÉ ¼ö ÀÖ´Ù. ±× ¹Û¿¡ ANSI C¿¡¼­´Â ÀÌ¿Í °°Àº ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍÇü °Ë»ç¸¦ ÇàÇϱ⠶§¹®¿¡, ÇÁ·Î±×·¥ ³»¿¡ ÀÛ¼ºÇÑ ÇÔ¼ö°¡ ¿©·¯ °³ ÀÖÀ» °æ¿ì ÆĽºÄ®°ú ¸¶Âù°¡ Áö·Î ¾î¶² ÇÔ¼ö¸¦ È£ÃâÇÏ·Á¸é ¹Ýµå½Ã ±× ÇÔ¼ö°¡ Àü¿¡ ÀÌ¹Ì Á¤ÀǵǾî ÀÖ¾î ¾ß ÇÑ´Ù. Áï ÇÔ¼ö func_a°¡ func_b¸¦ È£ÃâÇÏ°í ´Ù½Ã func_b°¡ func_c¸¦ È£ ÃâÇϸé ÇÁ·Î±×·¥ ³»¿¡ °¢ ÇÔ¼ö¸¦ func_c, func_b, func_aÀÇ ¼øÀ¸·Î À§Ä¡½Ã ÄÑ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö ¹èÄ¡¿¡ ´ëÇÑ Á¦ÇÑÀ» ÇÇÇϱâ À§ÇØ ANSI C¿¡¼­´Â ÇÔ¼ö ¿øÇü ¿¡ ÀÇÇÑ ÇÔ¼ö ¼±¾ðÀ» Áö¿øÇÏ°í ÀÖ´Ù. ÀÌ´Â ÆĽºÄ®ÀÇ forward ¼±¾ð°ú ±× °³ ³äÀÌ °ÅÀÇ °°´Ù. ÇÔ¼ö¸¦ ¼±¾ðÇÏ´Â ¹æ¹ýÀº ¾ÕÀÇ ¿¹¿¡ Ç¥½ÃÇØ ³õÀº ÇÔ¼ö ¿ø Çü¿¡´Ù°¡ ¼¼¹ÌÄÝ·ÐÀ» ºÙ¿©¼­ ÇÁ·Î±×·¥ ¼±µÎ¿¡ µÎ¸é µÈ´Ù. ¿¹¸¦ µé¾î¼­ swa p ÇÔ¼ö¸¦ ¼±¾ðÇÏ·Á¸é, +------ ÇÔ¼ö ¿øÇü¿¡ ¼¼¹ÌÄÝ·ÐÀ» | ºÙ¿©¾ß ÇÑ´Ù. void swap(double *pa, double *pb); | | +-------------------------------+ ÇÔ¼ö ¿øÇü(function prototype) ÀÌ·¸°Ô Çصθé, ¿¹ÄÁ´ë ÇÔ¼ö func_a, func_b, func_c¸¦ ÇÁ·Î±×·¥ ¼±µÎ ¿¡´Ù°¡ ¼±¾ðÇصθé, ÇÔ¼ö º»Ã¼´Â ±× ÇÔ¼ö ¼±¾ð ÀÌÈÄÀÇ ¾Æ¹«µ¥³ª ¼ø¼­¿¡ »ó °ü¾øÀÌ µÑ ¼ö ÀÖ´Ù. Áï func_a, func_b, func_c¿Í °°Àº ¼ø¼­·Î À§Ä¡½Ãų ¼öµµ ÀÖ´Ù. ÀÌ¿Í °°ÀÌ ÇÁ·Î±×·¥ ³»¿¡ ¾²ÀÎ ¸ðµç ÇÔ¼ö´Â °¡±ÞÀû ÇÔ¼ö ¼±¾ðÀ» ÇÁ·Î ±×·¥ ¼±µÎ¿¡ Çصδ °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. µû¶ó¼­ ÇÁ·Î±×·¥ ³»¿¡¼­ ÀÛ¼ºµÈ ÇÔ ¼ö´Â ¹°·Ð ÇÔ¼ö ¼±¾ðÀ» Çصξî¾ß ÇÏ°í, ¶ÇÇÑ printf, gets µî°ú °°Àº Åͺ¸ CÀÇ Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ »ç¿ëÇÒ °æ¿ì¿¡µµ ±× ÇÔ¼öµéÀÌ ¼±¾ðµÇ¾î ÀÖ´Â Åͺ¸ CÀÇ ÇØ´ç Ç¥ÁØ Çì´õ È­ÀÏÀ» ÇÁ·Î±×·¥ ¼±µÎ¿¡¼­ Æ÷ÇÔ(include)½ÃÄÑÁÖ ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù(´Ü main ÇÔ¼ö¸¸Àº ¿¹¿Ü·Î ÇÔ¼ö ¼±¾ðÀÌ ÀüÇô ÇÊ¿ä¾ø ´Ù). ¼­·ÐÀÌ ´Ù¼Ò ±æ¾îÁ³´Âµ¥, ÀÌÁ¦ ÀÌ ±ÛÀÇ º»·ÐÀÎ "±â¾ïºÎ·ùÀÇ Á¤º¹"¿¡ µé¾î°¡±â·Î ÇÑ´Ù. Áö¸éÀÌ ÇÑÁ¤µÇ¾î Àֱ⠶§¹®¿¡ ±ÛÀÌ ´Ù¼Ò ºýºýÇÏÁú Å×´Ï ±î ¸¶À½À» °¡´Ùµë°í ÇÑ ±ÛÀÚ ÇÑ ±ÛÀÚ ¶Ç¹Ú¶Ç¹Ú ¸Ó¸´¼Ó¿¡ »õ±â±â ¹Ù¶õ´Ù. ±×³É ¾èÀâ°í ´ýº¡´ýº¡ ´ë¸ç Àдٰ¡´Â ±ÛÀÚ°¡ ÀüºÎ ´«¿¡¼­ ¹Ý»çµÇ¾î ƨ°Ü ³ª°¥Å×´Ï ÇÏ´Â ¸»ÀÌ´Ù. ±×·³ °ÇÅõ¸¦ ºó´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #22 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ1-2: ±â¾ïºÎ·ùÀÇ Á¤º¹ 03/06 00:19 159 line --------------------------------------------------------------------- 3 Áö¿ªº¯¼ö vs. ÀÚµ¿º¯¼ö, Àü¿ªº¯¼ö vs. ¿ÜºÎº¯¼ö --------------------------------------------------------------------- ÆĽºÄ®¿¡´Â Àü¿ªº¯¼ö(global variable)¶ó´Â °ÍÀÌ ÀÖ´Ù. Àü¿ªº¯¼ö¶õ ¸» ±×´ë·Î ÇÁ·Î±×·¥ÀÇ ¸ðµç ºÎºÐ¿¡¼­ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â º¯¼öÀÌ´Ù. C¿¡ ´Â ÆĽºÄ®ÀÇ Àü¿ªº¯¼ö¿Í ±× °³³äÀÌ µ¿ÀÏÇÑ ¿ÜºÎº¯¼ö¶ó´Â °ÍÀÌ ÀÖ´Ù. ÆĽº Ä®°ú CÀÇ º¯¼ö¸¦ ºñ±³Çغ¸ÀÚ. ¿ë¾îÀÇ Â÷ÀÌÀÏ »Ó ±× °³³äÀº µ¿ÀÏÇÏ´Ù. <Ç¥ 1> ÆĽºÄ®°ú CÀÇ º¯¼ö ---s--------------------------------------------- ÆĽºÄ® Åͺ¸ C ------------------------------------------------ Áö¿ª(local)º¯¼ö ÀÚµ¿(automatic)º¯¼ö Àü¿ª(global)º¯¼ö ¿ÜºÎ(external)º¯¼ö ------------------------------------------------ ¾Õ¼­ ¼­·Ð¿¡¼­ ¿¹·Î µç swap ÇÔ¼ö¿¡¼­ ¼±¾ð(Á¤ÀÇ)µÈ temp¶ó´Â º¯¼ö°¡ ÀÚµ¿º¯¼ö¿¡ ÇØ´çÇÑ´Ù. ÀÚµ¿º¯¼ö¿Í ¿ÜºÎº¯¼öÀÇ Æ¯Â¡Àº ´ÙÀ½°ú °°ÀÌ ºñ±³µÈ ´Ù. ¾Æ¹«·¡µµ ÇÑ ±¸Àý ÇÑ ±¸Àý ¾Ï±âÇÏ´Â ÆíÀÌ ÁÁÀ» ¼º ½Í´Ù. <Ç¥ 2> ÀÚµ¿º¯¼ö¿Í ¿ÜºÎº¯¼öÀsÇ ºñ±³ --------------------------------------------------------------------- [1] º¯¼ö¸¦ Á¤ÀÇÇÏ´Â À§Ä¡ * ÀÚµ¿º¯¼ö´Â ÇÔ¼ö ³»ºÎÀÇ ¼±¾ðºÎ¿¡¼­ ¼±¾ð(Á¤ÀÇ)ÇÑ´Ù. * ¿ÜºÎº¯¼ö´Â ÇÔ¼ö ¿ÜºÎ ¾Æ¹« À§Ä¡¿¡¼­³ª Á¤ÀÇÇÑ´Ù. [2] º¯¼öÀÇ »ç¿ë ¹üÀ§: * ÀÚµ¿º¯¼ö´Â ¼±¾ð(Á¤ÀÇ)µÈ ÇÔ¼ö ³»ºÎ¿¡¼­¸¸ »ç¿ë °¡´ÉÇÏ´Ù. * ¿ÜºÎº¯¼ö´Â ÇÁ·Î±×·¥ Àüü¿¡ °ÉÃÄ ¸ðµç ÇÔ¼ö¿¡¼­ »ç¿ë °¡´ÉÇÏ´Ù. [3] º¯¼öÀÇ ¼ö¸í: * ÀÚµ¿º¯¼ö´Â ÇÔ¼ö°¡ ½ÇÇàµÊ°ú µ¿½Ã¿¡ »ý¼ºµÇ¸ç ÇÔ¼ö°¡ ½ÇÇàµÉ µ¿¾È¿¡¸¸ Á¸ÀçÇÑ´Ù. Áï ÇÔ¼öÀÇ ½ÇÇàÀÌ Á¾·áµÊ°ú µ¿½Ã¿¡ ¼Ò¸êµÈ´sÙ. ÇÔ¼öÀÇ ½ÇÇà ÀÌ Á¾·áµÇ´Â Áï½Ã ¼Ò¸êµÇ¹Ç·Î ¸Þ¸ð¸®¸¦ Àý¾àÇÏ´Â È¿°ú¸¦ °¡Á®¿Â´Ù. * ¿ÜºÎº¯¼ö´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â µ¿¾È Ç×»ó Á¸ÀçÇϸç ÇÁ·Î±×·¥ÀÇ ½ÇÇà ÀÌ Á¾·áµÉ ¶§±îÁö °áÄÚ ¼Ò¸êµÇÁö ¾Ê´Â´Ù. ¿ÜºÎº¯¼ö°¡ ÀúÀåÇÏ°í ÀÖ´Â °ªµµ »ç¿ëÀÚ°¡ º¯°æÇÏÁö ¾Ê´Â ÇÑ ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀÌ Á¾·áµÉ ¶§±îÁö ±× ´ë·Î À¯ÁöµÈ´Ù. [4] º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ ÃʱâÄ¡À» ÁöÁ¤ÇßÀ» °æ¿ì: * ÀÚµ¿º¯¼ö´Â ÇÔ¼ö°¡ ½ÇÇàµÉ ¶§¸¶´Ù ÃʱâÈ­µÈ´Ù. * ¿ÜºÎº¯¼ö´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÊ°ú µ¿½Ã¿¡ ´Ü ÇÑ ¹ø¸¸ ÃʱâÈ­µÈ´Ù. [5] º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ ÃÊs±âÄ¡¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾ÒÀ» °æ¿ì: * ÀÚµ¿º¯¼ö´Â ¸ðµÎ ¾²·¹±â°ª(garbage)À» °¡Áø´Ù. µû¶ó¼­ »ç¿ëÀÚ°¡ ¾î¶° ÇÑ ¹æ¹ýÀ¸·ÎµçÁö ÃʱâÈ­ÇÑ ´ÙÀ½ »ç¿ëÇØ¾ß ÇÑ´Ù. ¿ÜºÎº¯¼ö´Â ¸ðµÎ 0À¸ ·Î ÃʱâÈ­µÈ´Ù. [6] ÀúÀåµÇ´Â Àå¼Ò: * ÀÚµ¿º¯¼ö´Â µ¿ÀûÀÎ ½ºÅÃ(stack)»ó¿¡¼­ »ý¼º, ÀúÀå, ¼Ò¸êµÈ´Ù. * ¿ÜºÎº¯¼ö´Â ½ºÅðú º°°³ÀÎ Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª(<±×¸² 1> Âü°í)¿¡ ÀúÀåµÈ ´Ù. --------------------------------------------------------------------- <±×¸² 1> ¼ÒÇü(Small) ¸Þ¸ð¸® ¸ðµ¨ÀÏ ¶§ÀÇ ¸Þ¸ð¸®¸Ê ----------------------------s----------------------------------------- ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ¿Í ¸Þ¸ð¸®¸Ê »ç¿ëµµ ¼¼±×¸ÕÆ®ÀÇ Å©±â | | +---------------------------+ CS--+-| | ÃÖ´ë | | ÄÚµå | 64K ¹ÙÀÌÆ®±îÁö| | | +-| | +---------------------------+--+ ¿ÜºÎº¯¼ö, DS,SS,ES--+-| ÃʱâÈ­µÈ µ¥ÀÌÅÍ s | | Á¤Àûº¯¼ö, | +---------------------------+ +--¹®ÀÚ¿­ »ó¼ö°¡ | | ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ | | ÀúÀåµÇ´Â °÷ | +---------------------------+--+ | | ±Ù°Å¸® Èü | +--µ¿Àû ¸Þ¸ð¸® ÇÒ´ç ÃÖ´ë | |---------------------------|--+ 64K ¹ÙÀÌÆ®±îÁö| | | | | ÀÚÀ¯ °ø°£ | | | | | |---------------------------|-s-+--SP | | | | ÀÚµ¿º¯¼ö°¡ À§Ä¡ +-| ½ºÅà | | +---------------------------+--+--Starting SP +-| ¿ø°Å¸® Èü | | | | | +--µ¿Àû ¸Þ¸ð¸® ÇÒ´ç | |---------------------------|--+ ³²Àº | | | ¸Þ¸ð¸® ³¡±îÁö | | | | | ÀÚÀ¯ °ø°£ | s | | | | +---------------------------+ * ÃʱâÈ­ ¶Ç´Â ºñÃʱâÈ­µÈ µ¥ÀÌÅÍÀÇ ¿µ¿ªÀÌ Á¤Àû µ¥ÀÌÅÍ(static data) ¿µ¿ªÀÌ´Ù. --------------------------------------------------------------------- ±×·±µ¥ ÆĽºÄ®ÀÇ Áö¿ªº¯¼ö¿¡ ÇØ´çÇÏ´Â CÀÇ ÀÚµ¿º¯¼öÀÇ °æ¿ì¿¡´Â "¼±¾ð "°ú "Á¤ÀÇ"¸¦ ±¸ºÐÇÒ ÇÊ¿ä°¡ ¾ø¾ú´Ù. ¿Ö³ÄÇϸé ÀÚµ¿º¯¼ö´Â Á¤ÀÇ°¡ °ð ¼±¾ð ÀÌ°í ¼±¾ðÀÌ °ð Á¤ÀÇÀ̱⠶§¹®¿¡, Á¤ÀǶó´Â ¿ë¾î¸¦ »ç¿ëÇÏÁö ¾Ê°í °ü½À»ó ¼±¾ðÀ̶ó´Â ¿ë¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÎ °æÇâsÀÌ´Ù. ±×·¡¼­ Á»Àü¿¡ ÀÚµ¿º¯¼ö temp¸¦ ¾ð±ÞÇÒ ¶§, "º¯¼ö Á¤ÀÇ"¶ó´Â ¿ë¾î¿Í " º¯¼ö ¼±¾ð"À̶ó´Â ¿ë¾î¸¦ µ¿ÀÏÇÑ ¶æÀ¸·Î °£ÁÖÇÏ¿© "º¯¼ö¸¦ ¼±¾ð(Á¤ÀÇ)ÇÑ´Ù "¶ó°í Çß´Ù. ±×·¯³ª ¿ÜºÎº¯¼ö³ª ÇÔ¼öÀÇ °æ¿ì "Á¤ÀÇ(definition)"¿Í "¼±¾ð (declaration)"À̶ó´Â ¿ë¾î°¡ ¸í¹éÈ÷ ±¸ºÐÁö¾îÁ® »ç¿ëµÇ¹Ç·Î ±× ¶æÀ» ¸íÈ® ÇÏ°Ô ÀÌÇØÇÏ´Â °ÍÀÌ ´ë´ÜÈ÷ Áß¿äÇÏ´Ù. --------------------------------------------------------------------- 3 Á¤ÀÇ(definition)¿Í ¼±¾ð(declaration)ÀÇ ±¸º° ----------------------------------------------------s----------------- * Á¤ÀÇ¿Í ¼±¾ðÀÇ ´ë»óÀº º¯¼ö¿Í ÇÔ¼ö µÎ °¡Áö·Î Á¤ÇÑ´Ù. ÀÌ ±Û¿¡¼­´Â º¯¼ö¿Í ÇÔ¼ö¸¸ Á¤ÀÇ¿Í ¼±¾ðÀÇ ´ë»óÀ¸·Î °£ÁÖÇÑ´Ù. * Á¤ÀÇ´Â "¸¸µç´Ù"´Â Àǹ̸¦ °¡Áö°í ÀÖ´Ù. * ¼±¾ðÀº "¾Ë¸°´Ù"´Â Àǹ̸¦ °¡Áö°í ÀÖ´Ù. * Á¤ÀÇ´Â º¯¼ö³ª ÇÔ¼öÀÇ Æ¯¼ºÀ» ¾ðÁ¦³ª ¿ÏÀüÇÏ°Ô ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¿ÏÀüÇÏ°Ô ÁöÁ¤Çؾ߸¸ "¸¸µé ¼ö" Àֱ⠶§¹®ÀÌ´Ù. * ¼±¾ðÀº º¯¼ö³ª ÇÔ¼öÀÇ Æ¯¼º Áß ÇÊ¿äÇÑ °Í¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿Ö³ÄÇÏ¸é º¯¼ö³ª ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ÇÊ¿äÇÑ Á¤º¸¸¸ "¾Ë·ÁÁÖ¸é" µÇ±â ¶§ ¹®ÀÌ´Ù. ±×·¯¹Ç·Î ÇÊ¿äs¾ø´Â Á¤º¸´Â »ý·«ÇÒ ¼ö ÀÖ´Ù. * µû¶ó¼­ ¹è¿­ÀÇ Å©±â³ª ¸Å°³º¯¼ö ¸®½ºÆ®´Â Á¤ÀÇ¿¡ ¸í½ÃÇØ¾ß ÇÑ´Ù. * µû¶ó¼­ ¹è¿­ÀÇ Å©±â³ª ¸Å°³º¯¼ö ¸®½ºÆ®´Â ¼±¾ð¿¡¼­ »ý·« °¡´ÉÇÏ´Ù. ´Ü, »ý·«Çϴµ¥ ¾à°£ÀÇ Á¦¾àÀÌ µû¸¥´Ù. * Á¤ÀÇ´Â º¯¼ö³ª ÇÔ¼ö¸¦ À§ÇÑ ÀúÀå Àå¼Ò¸¦ ¸Þ¸ð¸®»ó¿¡ ÇÒ´çÇϵµ·Ï ÇÑ´Ù. * ¼±¾ðÀº º¯¼ö³ª ÇÔ¼öÀÇ Æ¯¼ºÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁֱ⸸ ÇÑ´Ù. Ư¼ºÀº º¯¼ö³ª ÇÔ¼öÀÇ µ¥ÀÌÅÍÇü, ¹è¿­ÀÇ Å©±â, ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ® µîµîÀ» Æ÷ÇÔÇؼ­ º¯¼ö³ª ÇÔ¼ö¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ ¸»ÇÑ´Ù. < ÇϳªÀÇ º¯¼ö³ª ÇÔ¼ö¿¡ ´ëÇØ > * Á¤ÀsÇ´Â ¸¸µå´Â °ÍÀ̹ǷΠÇÁ·Î±×·¥ Àüü¸¦ ÅëÇØ ´Ü ÇÑ ¹ø¸¸ ÀÌ·ç¾îÁø´Ù. * ¼±¾ðÀº ¾Ë¸®´Â °ÍÀ̹ǷΠÇÁ·Î±×·¥ Àüü¸¦ ÅëÇØ ¿©·¯ ¹ø Áߺ¹µÇ¾îµµ ÁÁ ´Ù. ¿©±â¼­ ÇÁ·Î±×·¥ Àüü¶õ ÇÁ·Î±×·¥ÀÌ µÑ ÀÌ»óÀÇ ¸ðµâ·Î ±¸¼ºµÇ¾î ÀÖ À» ¶§ ±× ¸ðµç ¸ðµâÀ» Æ÷ÇÔÇؼ­ ÀÏÄ´´Ù. * Á¤ÀÇ´Â ¾ðÁ¦³ª ¼±¾ðÀ» °âÇÑ´Ù! * ¼±¾ðÀº °áÄÚ Á¤ÀǸ¦ °âÇÒ ¼ö ¾ø´Ù. * ÀÚµ¿º¯¼öÀÇ °æ¿ì Á¤ÀÇ¿Í ¼±¾ðÀº ±¸º°µÇÁö ¾Ê´Â´Ù. * ¿ÜºÎº¯¼ö¿Í ÇÔ¼öÀÇ °æ¿ì Á¤ÀÇ¿Í ¼±¾ðÀº ¸íÈ®ÇÏ°Ô ±¸º°µÈ´Ù. * µû¶ó¼­ ÀÚµ¿º¯¼öÀÇ °æ¿ì ±¸º°¾øÀÌ "º¯¼ö¸¦ ¼±¾ð ¶Ç´Â Á¤ÀÇÇÑ´Ù"°í ¸»ÇÑ s ´Ù. * µû¶ó¼­ ¿ÜºÎº¯¼öÀÇ °æ¿ì "º¯¼ö ¼±¾ð"°ú "º¯¼ö Á¤ÀÇ"´Â ¼­·Î ´Ù¸£´Ù. * µû¶ó¼­ ÇÔ¼öÀÇ °æ¿ì "ÇÔ¼ö ¼±¾ð"°ú "ÇÔ¼ö Á¤ÀÇ"´Â ¼­·Î ´Ù¸£´Ù. < Á¤ÀÇ¿¡ ÀÇÇÑ ¼±¾ð ¶Ç´Â ±×³É ¼±¾ðÀÌ ¹ÌÄ¡´Â ¹üÀ§(scope) > * ÇÔ¼ö ³»ºÎ¿¡¼­ ¼±¾ðÀÌ ÀÌ·ç¾îÁø °æ¿ì ÇÔ¼ö ³»ºÎ¿¡¸¸ ¾Ë·ÁÁø´Ù. * ÇÔ¼ö ¿ÜºÎ¿¡¼­ ¼±¾ðÀÌ ÀÌ·ç¾îÁø °æ¿ì ¼±¾ðÀÌ ÀÌ·ç¾îÁø È­ÀÏ ³»(ÇÁ·Î±× ·¥ Àüü°¡ ¾Æ´Ô)¿¡¸¸ ¾Ë·ÁÁø´Ù. º°´Ù¸¥ Á¶Ä¡¸¦ ÃëÇÏÁö ¾ÊÀ¸¸é ´Ù¸¥ È­ ÀÏ¿¡ ¼±¾ðÀÌ ¾Ë·ÁÁöÁö ¾Ê´Â´Ù. * ¼±¾ðÀº ÇØ´ç º¯¼ö³ª ÇÔ¼ö°¡ ½ÇÁ¦ »ç¿ëµÇ±â Àü¿¡ ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù. ±s×·¸ Áö ¾ÊÀ¸¸é º¯¼öÀÇ °æ¿ì "Undefined symbol" ¿¡·¯°¡ ¹ß»ýÇϸç ÇÔ¼öÀÇ °æ ¿ì "Type mismatch in redeclaration"¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #23 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ1-3: ±â¾ïºÎ·ùÀÇ Á¤º¹ 03/06 00:37 263 line --------------------------------------------------------------------- 4 ¿ÜºÎº¯¼öÀÇ Á¤ÀÇ(definition) --------------------------------------------------------------------- ¿ÜºÎº¯¼ö¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀº ÀÚµ¿º¯¼ö¸¦ ¼±¾ð(Á¤ÀÇ)ÇÏ´Â ¹æ¹ý°ú °ÅÀÇ À¯»çÇÏ´Ù. ´Ü ÇÑ °¡Áö, Á¤ÀÇÇÏ´Â À§Ä¡°¡ ÇÔ¼ö ³»ºÎ°¡ ¾Æ´Ï¶ó ÇÔ¼ö ¿ÜºÎ¶ó ´Â Á¡¸¸ ´Ù¸¦ »Ó ³ª¸ÓÁö´Â ¶È°°´Ù. ±×·¯¹Ç·Î ¾î¶² º¯¼ö°¡ Á¤ÀǵǾúÀ» ¶§ ±× Á¤ÀÇµÈ À§Ä¡°¡ ÇÔ¼ö ³»ºÎÀ̸é ÀÚµ¿º¯¼ö, ÇÔ¼ö ¿ÜºÎÀÌ¸é ¿ÜºÎº¯¼ö¶ó°í º¸¸é Ʋ¸²¾ø´Ù. <±×¸² 2> ¿ÜºÎuº¯¼ö¿Í ÀÚµ¿º¯¼öÀÇ Á¤ÀÇ ¹æ¹ý ºñ±³ --------------------------------------------------------------------- int function1(int param); --- ÇÔ¼ö ¼±¾ð ...... char *format; -+ int number; +- ¿ÜºÎº¯¼ö¸¦ Á¤ÀÇ double value[10]; -+ ÀÌÈÄÀÇ ¸ðµç ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÀ½ void main(void) { int temp; -+- ÀÚµ¿º¯¼ö¸¦ ¼±¾ð(Á¤ÀÇ) float realnumber; -+ main ÇÔ¼ö ³»¿¡¼­¸¸ »ç¿ë °¡´É. ...... temp = function1(10); ...... } char mychar; ---- ¿ÜºÎº¯¼ö¸¦ Á¤ÀuÇ ÀÌÈÄÀÇ ¸ðµç ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÀ½ main ÇÔ¼ö¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾øÀ½¿¡ ÁÖÀÇ int function1(int param) { char c; ---- ÀÚµ¿ º¯¼ö¸¦ ¼±¾ð(Á¤ÀÇ) float realnumber; ---- main ÇÔ¼ö ³»ÀÇ ¶È°°Àº À̸§À» °¡Áø realnumber¿Í´Â ÀüÇô »ó°ü ¾ø´Â ...... º°°³ÀÇ ÀÚµ¿º¯¼ö c = mychar & 0x7f; ...... } --------------------------------------------------------------------- <±×¸² 2>¸¦ ÀÌÇØÇϴµ¥ º° ´Ù¸¥ ¹«u¸®°¡ ¾øÀ¸¸®¶ó ¹Ï°í ´õ ÀÌ»ó ºÎ¿¬ÇÏ Áö´Â ¾Ê°Ú´Ù. ¿©±â¼­´Â ¿ÜºÎº¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ ÁöÄѾßÇÒ °ü·Ê(°ü½À) ÇÑ °¡ Áö¸¸ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. --------------------------------------------------------------------- [°ü·Ê] ¿ÜºÎº¯¼ö´Â ÇÔ¼ö ¼±¾ð°ú °°ÀÌ È­ÀÏÀÇ ¼±µÎ¿¡¼­ Á¤ÀÇÇϵµ·Ï ÇÑ´Ù. Áï È­ÀÏ ³»ÀÇ ¾î¶² ÇÔ¼ö¶óµµ Á¤ÀǵDZâ ÀÌÀü¿¡ ¿ÜºÎº¯¼ö¸¦ Á¤ÀÇÇÏ ´Â °ÍÀÌ ÁÁ´Ù. <±×¸² 2>ÀÇ mychar ¿ÜºÎº¯¼öó·³ ÇÔ¼öµé »çÀÌ¿¡¼­ Á¤ÀÇÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé Â÷ÈÄ¿¡ main ÇÔ¼öu¿¡¼­ mychar¸¦ »ç¿ëÇÒ °æ¿ì ¿¡·¯°¡ ¹ß»ýÇϱ⠶§¹®ÀÌ´Ù. --------------------------------------------------------------------- --------------------------------------------------------------------- 5 ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏ°ú ¿ÜºÎº¯¼öÀÇ ¼±¾ð --------------------------------------------------------------------- ÀÌÁ¦ ¿ÜºÎº¯¼öÀÇ ¼±¾ð¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸ÀÚ. ¿ÜºÎº¯¼ö¸¦ ¼±¾ðÇÏ´Â ÀÌÀ¯ ´Â ÇÑ ¸¶µð·Î ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏ(separate compilation)À» °¡´ÉÇÏ°Ô Çϱâ À§ÇÔÀÌ´Ù. º¸Åë ÇÁ·Î±×·¥ÀÇ Å©u±â°¡ ¾î´À Á¤µµ ÀÌ»ó(´ë·« 500Çà ÀÌ»ó)À¸·Î Ä¿Á³À» °æ¿ì ÇϳªÀÇ ¼Ò½º È­ÀÏ ¾È¿¡ ÇÁ·Î±×·¥ ÀüºÎ¸¦ ´ã´Â °ÍÀº »ó´çÈ÷ ºñ È¿À²ÀûÀÌ´Ù. ±×°ÍÀº ÄÄÆÄÀÏÇÏ´Â µ¥ ¼Ò¿äµÇ´Â ½Ã°£ÀÌ ¹«½ÃÇÒ ¼ö ¾øÀ» ¸¸Å­ °É¸®±â ¶§¹®ÀÌ´Ù. ´ë°³ 500Çà Á¤µµ µÇ´Â ºñ±³Àû ±ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ¹ú·¹¸¦ ¿ÏÀüÈ÷ Á¦°Å Çϱâ À§Çؼ­´Â ÄÄÆÄÀÏÀ» ¼ö½Ê ¹ø, ²¿ÀÌ¸é ¹é¼ö½Ê ¹ø±îÁöµµ ÇØ¾ß ÇϹǷΠ¼Ò ½º È­ÀÏÀÇ Å©±â°¡ Å©¸é Ŭ¼ö·Ï ÄÄÆÄÀÏ È¿À²ÀÌ ±Øµµ·Î ÀúÇϵȴÙ. µû¶ó¼­ ±ä ÇϳªÀÇ ¼Ò½º È­ÀÏÀ» ÀÛÀº ¼Ò½º È­ÀÏ ¿©·¯ °³·Î ºÐÇÒÇÏ¿© ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ ¿©·¯¸uð·Î ÁÁ´Ù. ±×·¸°Ô ºÐÇÒ ÄÄÆÄÀÏÀ» ÅëÇÏ¿© °¢°¢ÀÇ È­Àϸ¶´Ù µ¶¸³ÀûÀ¸·Î ¹ú·¹¸¦ Á¦°ÅÇÑ ´ÙÀ½ ÃÖÁ¾ÀûÀ¸·Î ¸µÅ© °úÁ¤À» °ÅÃÄ ½ÇÇà È­ÀÏÀ» ¸¸µé¸é µÇ ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇϳªÀÇ ÇÁ·Î±×·¥À» ¸î °³ÀÇ ¼Ò½º È­ÀÏ¿¡ ³ª´©¾î ´ãÀ» ¶§ °¢°¢ÀÇ ¼Ò½º È­ÀÏÀ» ±× ÇÁ·Î±×·¥ÀÇ ¸ðµâ(module)À̶ó°í ºÎ¸¥´Ù. C´Â ¿ø·¡ºÎÅÍ ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀ» Áö¿øÇØ¿À´ø ¾ð¾îÀÌ´Ù. ÆĽºÄ®ÀÇ °æ¿ì Åͺ¸ ÆĽºÄ® 3.0 ÀÌÀü ¹öÀü¿¡¼­´Â ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀÌ Áö¿øµÇÁö ¾Ê ´Ù°¡ Åͺ¸ ÆĽºÄ® 4.0¿¡ À̸£·¯¼­¾ß À¯´Ö(unit)À̶ó´Â °³³äÀ¸·Î Áö¿øµÇ±â ½ÃÀÛÇß´uÙ. ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀÇ °¡Àå Å« ÀåÁ¡Àº ¸» ±×´ë·Î °¢°¢ÀÇ ¸ðµâÀ» µ¶¸³ÀûÀ¸·Î ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. µû¶ó¼­ ¾î´À ÇÑ ¸ðµâ¿¡ ¿¡·¯°¡ ¹ß »ýÇßÀ» °æ¿ì Àüü ¸ðµâÀ» ÄÄÆÄÀÏÇÒ ÇÊ¿ä°¡ ¾øÀÌ ¿¡·¯°¡ ¹ß»ýÇÑ ¸ðµâ¸¸ ÄÄ ÆÄÀÏÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ÄÄÆÄÀÏ ½Ã°£ÀÌ Å©°Ô ´ÜÃàµÊ°ú µ¿½Ã¿¡ ¹ú·¹Àâ±â (debugging)¿¡µµ ±×¸¸ÀÌ´Ù. ¿©±â±îÁö ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀÇ È¿¿ë¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾Ò´Ù. ´ÙÀ½À¸·Î ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀ» ÇÏ·Á¸é ¿ÜºÎº¯¼ö¸¦ ¼±¾ðÇÒ ÇÊ¿ä°¡ ÀÖÀ½¿¡ ´ëÇÏ¿© ¾Ë ¾Æº¸ÀÚ. ÇϳªÀÇ ÇÁ·Î±×·¥À» ¿©·¯ °³ÀÇ ¸ðµâu·Î ³ª´­·Á¸é °¢ ¸ðµâ °£ÀÇ Á¤º¸ ±³ ȯÀÌ ÇÊ¿äÇÏ´Ù. ƯÈ÷ ¿ÜºÎº¯¼ö¿¡ ´ëÇÑ Á¤º¸ ±³È¯ÀÌ Àý½ÇÈ÷ ¿äûµÈ´Ù. µû¶ó ¼­ °¢°¢ÀÇ ¸ðµâ¿¡¼­ »ç¿ëÇÒ ¿ÜºÎº¯¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾î¶»°Ô Çؼ­µçÁö °¢°¢ ÀÇ ¸ðµâ¸¶´Ù ¾Ë·ÁÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. ¼³¸íÀ» ÀÌÇØÇϱâ ÁÁµµ·Ï Çϱâ À§ÇØ ¿¹ ¸¦ µé¾î¼­, Àüü ÇÁ·Î±×·¥ÀÌ source1.c, source2.c, source3.c¶ó´Â È­Àϸí À» °¡Áø ¸ðµâ·Î ºÐÇҵǾî ÀÖ°í source1.c ¸ðµâ¿¡ mylove¶ó´Â ¿ÜºÎº¯¼ö°¡ Á¤ÀÇ(¼±¾ðÀÌ ¾Æ´Ô)µÇ¾î ÀÖ´Ù°í ÇÏÀÚ. <±×¸² 3> °¢°¢ÀÇ ¸ðµâ¿¡¼­ »ç¿ëÇÒ ¿ÜºÎº¯¼ö Á¤ÀÇ --------------------u------------------------------------------------- ¿ÜºÎº¯¼ö mylove¸¦ Á¤ÀÇ source1.c¿¡ Á¤ÀÇµÈ | ¿ÜºÎº¯¼ö¸¦ »ç¿ë source1.c | source2.c source3.c | +---------------+-+ +-----------------+ +-----------------+ | | int mylove; --+ | | int yourlove[3];| | int func2(.....)| | | | | | | { | | | void main(void) || inut func1(.....)| | ...... | | | { | | { | | mylove = 1;-+-+ | ...... | | ...... | | ...... | | } | | } | | } | | | | | | | | void sub1(void) | | void sub2(void) | | void sub3(void) | | { | | { | | { | | ...... | | ......| | u ...... | | } | | } | | } | +-----------------+ +-----------------+ +-----------------+ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ "Undefined symbol"¿¡·¯ ¹ß»ý --------------------------------------------------------------------- ±×·±µ¥ ¿ÜºÎº¯¼ö´Â ¾Õ¿¡¼­ ¾ð±ÞÇßµíÀÌ ´Ü ÇÑ ¹ø¸¸ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ±× ·¯¹Ç·Î ÇϳªÀÇ ¿ÜºÎº¯¼ö¿¡ ´ëÇÑ Á¤ÀÇ´Â ÇϳªÀÇ ¸ðµâ ¾È¿¡¼­ ´Ü ÇÑ ¹ø¸¸ ÀÌ ·ç¾îÁø´Ù. Áï mylove´Â source1.c ³»¿¡¼­ ´Ü ÇÑ ¹ø¸¸ Á¤ÀǵÈu´Ù. À̶§ Á¤ÀÇ ´Â ¾ðÁ¦³ª ¼±¾ðÀ» °âÇϹǷΠ¿ÜºÎº¯¼ö°¡ Á¤ÀǵǾî ÀÖ´Â ¸ðµâ ³»ºÎ¿¡´Â ±× ¿ÜºÎº¯¼ö°¡ "¾Ë·ÁÁø´Ù". µû¶ó¼­ mylove´Â source1.c ³»¿¡¼­ »ç¿ë °¡´ÉÇÏ ´Ù. ±×·¯³ª ¼±¾ðÀÇ ¿µÇâÀÌ ¹ÌÄ¡´Â ¹üÀ§´Â ÇϳªÀÇ ¸ðµâ·Î ÇÑÁ¤µÇ¾î À־ myloveÀÇ Á¤ÀǸ¸À¸·Î´Â ´Ù¸¥ ¸ðµâ¿¡ ±× ¿ÜºÎº¯¼öÀÇ Á¸À縦 ¾Ë¸± ¼ö°¡ ¾ø ´Ù. Áï source2.c³ª source3.c °°Àº ´Ù¸¥ ¸ðµâ¿¡¼­ mylove¸¦ »ç¿ëÇÒ ¼ö ¾ø ´Ù´Â ¶æÀÌ´Ù. <±×¸² 3>¿¡¼­ mylove´Â source1.c¿Í source3.c¿¡ ¾²ÀδÙ. ±×·¯¹Ç·Î °¢ °¢ÀÇ ¸ðµâÀ» ÄÄÆÄÀÏÇغ¸¸é source1.uc¿Í source2.c´Â ¼º°øÀûÀ¸·Î ÄÄÆÄÀ쵂 Áö¸¸ source3.c´Â "Undefined symbol" ¿¡·¯¸¦ ³»°í¸¸´Ù. ¿Ö³ÄÇÏ¸é ¿ÜºÎº¯ ¼ö myloveÀÇ Á¸Àç°¡ source3.c¿¡ ¾Ë·ÁÁöÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ±×·¸´Ù°í source3.c¿¡ mylove¸¦ Áߺ¹Çؼ­ Á¤ÀÇÇØ ³õÀ¸¸é ÄÄÆÄÀÏÀÌ¾ß ¹°·Ð ¼º°øÀûÀ¸·Î µÇÁö¸¸ ³ªÁß¿¡ ¼¼ ¸ðµâÀ» ¸µÅ©ÇÒ ¶§ source1.cÀÇ mylove ¿Í source3.cÀÇ mylove°¡ Ãæµ¹À» ÀÏÀ¸Å³ ¼ö ¹Û¿¡ ¾ø´Ù. ÀÌ·² ¶§ Á¤ÀÇ´Â ÇÏ Áö ¾Ê°í ´Ü¼øÈ÷ ¾Ë¸®±â¸¸ ÇÏ´Â "¼±¾ð"ÀÌ ÇÊ¿äÇÑ °ÍÀÌ´Ù. ¼±¾ðÀº Áߺ¹µÇ¾î µµ ÁÁ´Ù°í ¾Õ¿¡¼­ ºÐ¸íÈ÷ ¾ð±ÞÇßÀ½À» »ó±âÇϱâ u¹Ù¶õ´Ù. ¿ÜºÎº¯¼öÀÇ ¼±¾ðÀº Å°¿öµå externÀ» ½á¼­ ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù. extern µ¥ÀÌÅÍÇü º¯¼ö¸í1, º¯¼ö¸í2, ......; º¯¼ö Á¤ÀÇ ¹æ¹ý°ú ºñ±³ÇØ º¼ ¶§ ¹®ÀåÀÇ ¼±µÎ¿¡ externÀ̶õ Å°¿öµå¸¦ »ðÀÔÇÑ °ÍÀ» Á¦¿ÜÇÏ°í´Â °ÅÀÇ À¯»çÇÑ °Íó·³ º¸ÀδÙ. ±×·¯³ª ¼±¾ðÀº ÇÊ¿ä ÇÑ Á¤º¸¸¸ Á¦°øÇصµ µÈ´Ù´Â Ư¡ÀÌ Àֱ⠶§¹®¿¡ Á¤ÀǺ¸´Ù´Â ´õ °£´ÜÇÏ°Ô ±â¼úÇÒ ¼ö ÀÖ´Ù. °£´ÜÇÏ°Ô ¼±¾ðÇϱâ À§ÇØ »ý·«ÇÒ ¼ö ÀÖ´Â µÎ °¡Áö ¿¹´Â ¹è ¿­ÀÇ Å©±â¿Í ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®ÀÌ´Ù. ±×·±µ¥ ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®´Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍuÇü °Ë»ç¸¦ À§ÇØ °¡±Þ Àû »ý·«ÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ±â ¶§¹®¿¡ ½ÇÁ¦·Î´Â ¹è¿­ÀÇ Å©±â¸¸ »ý·«ÇÒ ¼ö ÀÖ ´Ù°í º¸´Â ÆíÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¿¹¸¦ µé¾î ¹è¿­ÀÇ Á¤ÀÇ°¡ ¾Æ·¡¿Í °°À» ¶§, int array[100]; À§ÀÇ ¹è¿­À» ¼±¾ðÇÏ°íÀÚ ÇÒ °æ¿ì ¹è¿­ÀÇ Å©±â¸¦ »ý·«ÇÒ ¼ö ÀÖ´Ù(´Ü, ´ÙÂ÷¿ø ¹è¿­ÀÏ ¶§´Â ¾à°£ÀÇ Á¦¾àÀÌ µû¸¥´Ù). ±×·¯¹Ç·Î extern int array[100]; extern int array[]; À§ÀÇ µÎ ¹®ÀåÀº µ¿ÀÏÇÑ ¼±¾ðÀÌ´Ù. ±×·±µ¥ °ü½ÀÀûÀ¸·Î °£´ÜÇÑ extern i nt array[]ÀÇ ¼±¾ðÀ» ÁÖ·Î »ç¿ëÇÑ´Ù. ÀÚ, ±×·³ ¿ÜºÎº¯¼öÀÇ ¼±¾ðÀ» »çu¿ëÇÏ¿© <±×¸² 3>ÀÇ ¸ðµâÀ» ¼öÁ¤Çغ¸ÀÚ. ¼±¾ðÀº Á¤ÀÇ¿Í ¸¶Âù°¡Áö·Î °¢ ¸ðµâÀÇ ¼±µÎºÎºÐ¿¡ ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ Á¡À» ¿°µÎ¿¡ µÎ°í <±×¸² 3>À» ¼öÁ¤ÇÏ¸é ¾Æ·¡ÀÇ <±×¸² 4>¿Í °°ÀÌ µÈ´Ù. <±×¸² 4> ±×¸² 3ÀÇ ¿ÜºÎº¯¼öÀÇ ¼±¾ðÀ» ¼öÁ¤ --------------------------------------------------------------------- ¿ÜºÎ¹è¿­ yourlove¸¦ Á¤ÀÇ | ¿ÜºÎº¯¼ö mylove¸¦ Á¤ÀÇ | ¿ÜºÎº¯¼ö mylove¸¦ ¼±¾ð | u | | source1.c | source2.c | source3.c | +---------------+-+ +------------------+| +-----------------+ | | int mylove;---+ | | int yourlove[3];-++ | extern int | | | | | | | mylove; ----+-+ | extern int | | | | | | yourlove[]; | | | | int func2(.....)| | | | | | { u| | void main(void) | | int func1(.....) | | ...... | | { | | { | | mylove = 1; | | ...... | | ...... | | ...... | | } | | } | | } | | | | | | | | void sub1(void) | | void sub2(void) | | void sub3(void) | | { | | { | | { | | ...... | | u ...... | | ...... | | } | | } | | } | +-----------------+ +------------------+ +-----------------+ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ --------------------------------------------------------------------- ¿ÜºÎº¯¼öÀÇ ¼±¾ð ±ÔÄ¢¿¡ ´ëÇؼ­´Â À̾߱Ⱑ ´Ù ³¡³µ´Ù. ³²Àº °ÍÀº ¼± ¾ð ¹æ¹ý»óÀÇ Å×Å©´ÐÀûÀÎ ¹®Á¦ÀÌ´Ù. ¿ÜºÎº¯¼öÀÇ °¹¼ö°¡ ÇѵΠ°³ Á¤µµ¶ó¸é ¸ð¸£Áö¸¸ °¹¼ö°¡ 10°³ Á¤µµ¸¸ ³Ñ¾î°¡µuµ µÎ °¡Áö Â¥Áõ³ª´Â ¹®Á¦°¡ ¹ß»ýÇÑ ´Ù. ±×°ÍÀº ¿ÜºÎº¯¼ö¸¦ »ç¿ëÇÏ´Â °¢°¢ÀÇ ¸ðµâ¸¶´Ù ÀÏÀÏÀÌ ±× ¿ÜºÎº¯¼ö¸¦ ¼±¾ðÇØÁÖ¾î¾ß ÇÑ´Ù´Â Á¡°ú(¿ÜºÎº¯¼ö°¡ Á¤ÀÇµÈ ¸ðµâÀº ¹°·Ð ¼±¾ðÀÌ ÇÊ¿ä¾ø ´Ù), ¸¸¾à ¿ÜºÎº¯¼ö Áß¿¡ Çϳª¶óµµ ¼öÁ¤ÇØ¾ß ÇÒ °æ¿ì°¡ »ý±â¸é ±× ¿ÜºÎº¯ ¼öÀÇ Á¤ÀÇ¿Í ¼±¾ðÀ» Æ÷ÇÔÇÏ´Â ¸ðµç ¸ðµâÀ» ÀÏÀÏÀÌ ¿¡µðÅÍ·Î Àоîµé¿© ¹ø°Å ·Ó°Ô ¼öÁ¤ÇØÁÖ¾î¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ¿¹¸¦ µé¾î º¯¼ö¸í mylove¸¦ loveofmineÀ¸·Î º¯°æÇÏ·Á¸é source1.c ¸ðµâ°ú source2.c ¸ðµâÀ» ¸ðµÎ ¼öÁ¤ÇØÁÖ¾î¾ß ÇÑ´Ù. ÀÌ·± ¹æ¹ýÀº ´ë´ÜÈ÷ ¹øu°Å·Î¿ï »Ó¸¸ ¾Æ´Ï¶ó ¼öÁ¤ÇÏ´Ù°¡ ÀÚÄ© ½Ç¼öÇÒ ¼ÒÁö°¡ ¸¹À¸¹Ç·Î ¾Æ¹«·¡µµ ´Ù¸¥ ¹æ¹ý À» °­±¸ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ·² ¶§ #include¹®À» »ç¿ëÇÑ °£´ÜÇÑ Å×Å©´ÐÀ» ¾² ´Â °ÍÀÌ´Ù. ¾ÕÀÇ <±×¸² 4>¸¦ Àß »ìÆ캸¸é source1.c ¸ðµâ¿¡¼­ »ç¿ëÇÏÁöµµ ¾Ê´Â yo urlove¶ó´Â ¹è¿­À» ¾µµ¥¾øÀÌ ¼±¾ðÇßÀ½¿¡µµ ºÒ±¸ÇÏ°í ¼±¾ðÀº Áߺ¹ °¡´ÉÇÏ´Ù ´Â ÀÌÀ¯·Î ÀÎÇØ ÄÄÆÄÀÏÀº ¼º°øÀûÀ¸·Î ³¡³¾ ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÀÌó·³ ¸ðµâ ³»¿¡¼­ »ç¿ëÇÏÁö ¾Ê´Â ¿ÜºÎº¯¼ö¶óµµ ¼±¾ðÀº ¾ó¸¶µçÁö ÇÒ ¼ö ÀÖ´Ù´Â Á¡À» ÃÖ´ëÇÑ ÀÌ¿ëÇÑ´Ù. ¿ì¼± ¸ðµç ¸ðµâ ³»u¿¡ Á¤ÀÇµÈ ¿ÜºÎº¯¼öÀÇ ¼±¾ðÀ» º°µµÀÇ Çì´õ È­ÀÏ ³» ¿¡ ¸ðÁ¶¸® ¸ð¾Æ ³õ°í, ±× ´ÙÀ½ °¢°¢ÀÇ ¸ðµâ¿¡¼­ #include¹®À¸·Î ±× Çì´õ È­ÀÏÀ» Æ÷ÇÔÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é ¾î¶² ¿ÜºÎº¯¼öÀÇ Ãß°¡ ¶Ç´Â º¯°æ »çÀ¯°¡ »ý±â´õ¶óµµ °¢°¢ÀÇ ¸ðµâÀ» ÀÏÀÏÀÌ ¹ø°Å·Ó°Ô ¼öÁ¤ÇÒ °Í ¾øÀÌ ¿ÜºÎº¯¼öÀÇ ¼±¾ðµéÀ» ¸ð¾Æ ³õÀº Çì´õ È­Àϸ¸ ¼Õº¸¸é µÈ´Ù. ¹°·Ð Çì´õ È­ÀÏÀ» »ç¿ëÇÏ´õ¶óµµ ¾îÂ÷ÇÇ ¿ÜºÎº¯¼öÀÇ Á¤ÀÇ°¡ ¼öÁ¤µÇ¸é ±× ¿ÜºÎº¯¼ö¸¦ »ç¿ëÇÏ´Â ¸ðµç ¸ðµâÀ» ÀçÄÄÆÄÀÏÇØ¾ß ÇÏÁö¸¸, °¢ ¸ðµâÀÇ ¼Ò ½º¸¦ ÀÏÀÏÀÌ ¼öÁ¤ÇØ¾ß ÇÏ´Â ¹ø°Å·uοòÀº ´ú ¼ö ÀÖ°Ô µÇ¾î ´ë´ÜÈ÷ Æí¸®ÇÏ´Ù. °Ô´Ù°¡ Çì´õ È­ÀÏ¿¡ °¢ ¸ðµâÀÌ °¡Áö´Â ÇÔ¼öÀÇ ¼±¾ðµé±îÁö ¸ð¾Æ ³õÀ¸¸é ±Ý »ó÷ȭÀÏ °ÍÀÌ´Ù. <±×¸² 4>¸¦ Çì´õ È­ÀÏÀ» »ç¿ëÇÏ¿© À籸¼ºÇÏ¸é ¾Æ·¡ÀÇ <±×¸² 5>¿Í °°ÀÌ µÈ´Ù. <±×¸² 5>ÀÇ Çì´õ È­ÀÏ hd.h¿¡´Â ÇÔ¼ö ¼±¾ðµµ Æ÷ÇÔ½ÃÄ×´Ù. <±×¸² 5> ¿ÜºÎº¯¼öÀÇ ¼±¾ðÀ» ¸ð¾Æ ³õÀº Çì´õ È­ÀÏ --------------------------------------------------------------------- hd.h +-----------------------+ | void sub1(void); | | int func1(......); | | void sub2(......);u | | int func2(......); | | void sub3(......); +-------------------------------------------+ | +---------------------+ | | extern int mylove; | | | | extern int yourlove[];| | | +---------------------+-+ | | | | | source1.c | source2.c | u source3.c | +-----------------+ | +------------------+ | +------------------+| | #include "hd.h"-+---+ | #include "hd.h" -+--+ | #include "hd.h" -++ | | | | | | | int mylove; | | int yourlove[3]; | | int func2(.....) | | | | | | { | | void main(void) | | int func1(.....) | | ...... | | { | | { | | muylove = 1; | | ...... | | ...... | | ...... | | } | | } | | } | | | | | | | | void sub1(void) | | void sub2(void) | | void sub3(void) | | { | | { | | { | | ...... | | ...... | | ...... | |} | | } | | } u | +-----------------+ +------------------+ +------------------+ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏµÊ --------------------------------------------------------------------- ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #24 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ1-4: ±â¾ïºÎ·ùÀÇ Á¤º¹ 03/06 00:40 220 line --------------------------------------------------------------------- 6 Á¤Àûº¯¼ö(static variable) --------------------------------------------------------------------- 6.1 ³»ºÎÁ¤Àûº¯¼ö(internal static variable) ÀÚµ¿º¯¼ö´Â ±× ¼ö¸íÀÌ ¿µ±¸ÀûÀÌÁö ¸øÇؼ­ ÇÔ¼öÀÇ ½ÇÇàÀÌ Á¾·áµÇ´Â Áï ½Ã ¼Ò¸êµÈ´Ù. ÀÚµ¿º¯¼öÀÇ ÀÌ·¯ÇÑ Æ¯Â¡Àº ¸Þ¸ð¸®ÀÇ Àý¾àÀ̳ª ±âŸ ¿©·¯°¡Áö Ãø¸é¿¡¼­ º¼ ¶§ ´ë´ÜÈ÷ À¯¿ëÇÏÁö¸¸, ¾î¶² »óȲ ÇÏ¿¡¼­´Â º¯¼ö°¡ ¼Ò¸êµÇÁö ¾Ê°í °è¼Ó ³²¾ÆÀÖ´Â °ÍÀÌ ´õ ÁÁÀ» ¶§°¡ ÀÖ´Ù. ÀÌ·² ¶§ ±ä¿äÇÏ°9Ô ¾²ÀÌ´Â °Í ÀÌ ¹Ù·Î ³»ºÎÁ¤Àûº¯¼ö(internal static variable)ÀÌ´Ù. ³»ºÎÁ¤Àûº¯¼öÀÇ ¼±¾ð(Á¤ÀÇ)Àº ÀÚµ¿º¯¼ö ¼±¾ð¹®ÀÇ ¼±µÎ¿¡ staticÀ̶ó´Â Å° ¿öµå¸¦ ºÙÀ̱⸸ ÇÏ¸é µÈ´Ù. static µ¥ÀÌÅÍÇü º¯¼ö¸í, º¯¼ö¸í, ......; +-----ÇÁ·Î±×·¥ ½ÇÇà½Ã ´Ü ÇÑ ¹ø¸¸ ÃʱâÈ­µÈ´Ù. ¿¹) | static double pi = 3.141592; static int array[100]; | +---------0À¸·Î ÃʱâÈ­µÈ´Ù. ³»ºÎÁ¤Àûº¯¼öÀÇ Æ¯Â¡Àº µü ÇÑ °¡Áö¸¸ Á¦¿ÜÇÏ°í´Â¿Ü9ºÎº¯¼öÀÇ Æ¯Â¡°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ±× ÇÑ °¡Áö¶õ, ¿ÜºÎº¯¼ö´Â ÇÁ·Î±×·¥ Àüü¿¡ °ÉÃÄ »ç¿ë °¡´ÉÇÑ Àü¿ªº¯¼öÀÌÁö¸¸ ³»ºÎÁ¤Àûº¯¼ö´Â ¹Ýµå½Ã ÇÔ¼ö ³»ºÎ¿¡¼­¸¸ ¾²ÀÌ´Â Áö ¿ªº¯¼ö¶ó´Â Á¡ÀÌ´Ù. ±× ¿Ü¿¡´Â ¿ÜºÎº¯¼öÀÇ Æ¯Â¡°ú ¶È°°´Ù. ±×¸®°í, ------------------------------------------------------ ³»ºÎÁ¤Àûº¯¼ö´Â ¿ÜºÎº¯¼öÀÇ Æ¯Â¡À» °¡Áø ÀÚµ¿º¯¼öÀÌ´Ù. ------------------------------------------------------ ¶ó°í »ý°¢ÇÏ¸é ºñ·Ï Á¤È®ÇÑ Ç¥ÇöÀº °áÄÚ ¾Æ´ÏÁö¸¸ ³»ºÎÁ¤Àûº¯¼ö¿¡ ´ëÇØ ´ë ·«ÀûÀ¸·Î³ª¸¶ °¨À»9 Àâ´Âµ¥´Â ´Ù¼Ò³ª¸¶ µµ¿òÀÌ µÇ¸®¶ó º»´Ù. 6.2 ¿ÜºÎÁ¤Àûº¯¼ö(external static variable) ¿ÜºÎÁ¤Àûº¯¼ö(external static variable)´Â ¿ÜºÎº¯¼ö¿Í ºñ±³Çغ¼ ¶§ º¯¼ö »ç¿ë ¹üÀ§(scope)¸¸ Á¦¿ÜÇÏ°í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ¿ÜºÎº¯¼ö´Â ÀÚ½ÅÀÌ Á¤ÀÇµÈ ¸ðµâ ÀÌ¿ÜÀÇ ¸ðµâ¿¡ extern¹®À» ½á¼­ ¾Ë¸± ¼ö ÀÖ´Ù(Áï ¿ÜºÎº¯¼ö ¼± ¾ð). ±×·¯³ª ¿ÜºÎÁ¤Àûº¯¼ö´Â °áÄÚ ¾Ë¸± ¼ö ¾ø´Ù. Áï ¿ÜºÎÁ¤Àûº¯¼ö°¡ Á¤ÀÇ µÈ ¸ðµâ ³»¿¡¸¸ ¾Ë·ÁÁø´Ù. µû¶ó¼­ ¿ÜºÎÁ¤Àûº¯¼ö´Â ÀÚ½ÅÀÌ Á¤ÀÇµÈ ¸ðµâ ³» ¿¡¼­¸¸ »ç¿ë °¡´ÉÇÏ°í ´Ù¸¥ ¸ðµâ¿¡¼­´Â »ç¿ëÀÌ ºÒ°¡´9ÉÇÏ´Ù. ÀÌ Á¡À» °¨¾È ÇÏ¸é ¿ÜºÎÁ¤Àûº¯¼öÀÇ Æ¯Â¡À» ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ----------------------------------------------- ¿ÜºÎÁ¤Àûº¯¼ö´Â ƯÁ¤ ¸ðµâ Àü¿ëÀÇ ¿ÜºÎº¯¼öÀÌ´Ù. ----------------------------------------------- ´Ù½Ã ¸»Çؼ­ ¿ÜºÎÁ¤Àûº¯¼ö´Â ƯÁ¤ÇÑ ¸ðµâ ³»¿¡¼­¸¸ »ç¿ëÇÒ »Ó ´Ù¸¥ ¸ð µâ¿¡´Â ¾Ë¸± ÇÊ¿ä°¡ ¾ø°Å³ª, ¾Ë·Á¼­´Â ¾È µÉ ¶§ »ç¿ëÇÏ¸é µÈ´Ù. ¿ÜºÎÁ¤Àû º¯¼öÀÇ Á¤ÀÇ´Â ¿ÜºÎº¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ ¹®Àå ¼±µÎ¿¡ staticÀ̶ó´Â Å°¿öµå¸¸ ºÙÀÌ¸é µÈ´Ù. static µ¥ÀÌÅÍÇü º¯¼ö¸í1, º9¯¼ö¸í2, ......; ¿¹) static float pi = 3.141592; static int array[10]; À§ÀÇ Á¤ÀÇ¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ ³»ºÎÁ¤Àûº¯¼ö¿Í Á¤ÀÇÇÏ´Â ¹æ¹ýÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ´Ù¸¸ Á¤ÀÇÇÏ´Â À§Ä¡°¡ ´Ù¸¦ »ÓÀÌ´Ù. µû¶ó¼­ Á¤Àûº¯¼ö°¡ ÇÔ¼ö ³» ºÎ¿¡¼­ Á¤ÀǵǾúÀ» ¶§ ³»ºÎÁ¤Àûº¯¼ö, ÇÔ¼ö ¿ÜºÎ¿¡¼­ Á¤ÀǵǾúÀ» ¶§ ¿ÜºÎÁ¤ Àûº¯¼ö¶ó°í º¸¸é Ʋ¸²¾ø´Ù. ÀÌ Á¡À» °í·ÁÇÏ¿© ÀÌ ±Û¿¡¼­ ¾ÕÀ¸·Î Ưº°È÷ ¸í½ÃÇØ¾ß ÇÒ °æ¿ì¸¦ Á¦¿Ü ÇÏ°í´Â "³»ºÎÁ¤Àûº¯¼ö"³ª "¿ÜºÎÁ¤Àûº¯¼ö"¶ó´Â ¿ë¾îÀÇ »ç¿ëÀ» ÇÇÇÏ°í ±×³É "Á¤Àûº¯¼ö(static variable)"¶ó´Â 9¿ë¾î¸¦ »ç¿ëÇϱâ·Î ÇÑ´Ù. ±× Á¤Àûº¯¼ö°¡ ³»ºÎÇüÀÎÁö ¿ÜºÎÇüÀÎÁö´Â Á¤ÀǵǾî ÀÖ´Â À§Ä¡¸¦ ºÁ¼­ ÆǺ°Çϱ⠹ٶõ´Ù. ÇÑÆí ¿ÜºÎÁ¤Àûº¯¼ö´Â ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀ» ÇÏÁö ¾Ê´Â ÇÑ °ÅÀÇ ¾µ¸ð ¾ø´Â Á¸ÀçÀÌ´Ù. ¿Ö³ÄÇϸé ÇÁ·Î±×·¥ Àüü°¡ ÇϳªÀÇ ¸ðµâ·Î ±¸¼ºµÇ¾î ÀÖÀ» °æ¿ì, ¿ÜºÎº¯¼ö¿Í ¿ÜºÎÁ¤Àûº¯¼ö°¡ ÀüÇô ±¸º°µÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¿Ö ±¸º° µÇÁö ¾Ê´ÂÁö´Â °õ°õÈ÷ »ý°¢Çغ¸¸é ÀÌÇØ°¡ °¥ °ÍÀÌ´Ù. ´ÙÀ½ÀÇ Á¤ÀûÇÔ¼öµµ ¸¶Âù°¡ÁöÀÌ´Ù. ±×¸®°í ÀÌ ±ÛÀ» óÀ½ ¾µ ´ç½Ã¿¡´Â Åͺ¸ C°¡ Á¦°øÇÏ´Â Project-Make ±â ´ÉÀ» ½á¼­ ¸ðµâº9° ºÐÇÒ ÄÄÆÄÀÏÀÇ ¿¹¸¦ ´Ù·ï º¼ ÀÛÁ¤À̾úÁö¸¸ ±ÛÀ» ½á³ª°¡ ´Ù º¸´Ï Áö¸é »çÁ¤ÀÌ µµÀúÈ÷ Çã¶ôÄ¡ ¾Ê¾Æ¼­ ºÎµæÀÌ »ý·«ÇÒ ¼ö ¹Û¿¡ ¾øÀ½À» ¾ÈŸ±õ°Ô »ý°¢ÇÏ´Â ¹ÙÀÌ´Ù. ¶ÇÇÑ º¯¼öÀÇ Á¾·ù Áß¿¡´Â Áö±Ý±îÁö ¼³¸íÇÑ ÀÚµ¿º¯¼ö, ¿ÜºÎº¯¼ö, Á¤Àû º¯¼ö ¿Ü¿¡µµ C¸¸ÀÇ Æ¯ÀÌÇÑ Á¸ÀçÀÎ "·¹Áö½ºÅͺ¯¼ö"¶ó´Â °ÍÀÌ Àִµ¥ ¿ëµµ°¡ ¸Å¿ì Á¦ÇѵǾî ÀÖ´Â °ü°è·Î ÀÌ ±Û¿¡¼­´Â ³íÇÏÁö ¾Ê°Ú´Ù. »ç½Ç ·¹Áö½ºÅͺ¯ ¼ö´Â ¸ô¶óµµ ÀüÇô ÁöÀåÀÌ ¾ø´Ù. --------------------------------------------------------------------- 7 Á¤ÀûÇÔ¼ö(static9 function) --------------------------------------------------------------------- Á¤ÀûÇÔ¼ö(static function)ÀÇ Àǹ̴ ¾Æ·¡¿Í °°´Ù. ¿ÜºÎÁ¤Àûº¯¼öÀÇ °³ ³ä°ú ¸Å¿ì À¯»çÇÔÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. Á¤ÀûÇÔ¼öÀÇ ¿ëµµµµ ¿ÜºÎÁ¤Àûº¯¼ö ¿Í °°´Ù. Áï ¾î¶² ÇÔ¼ö°¡ ƯÁ¤ÇÑ ¸ðµâ ³»¿¡¼­¸¸ »ç¿ëµÉ »Ó ´Ù¸¥ ¸ðµâ ³»¿¡ ¼­´Â ÀüÇô »ç¿ëµÇÁö ¾ÊÀ» ¶§(¶Ç´Â »ç¿ëÇؼ­´Â ¾È µÉ ¶§) ±× ÇÔ¼ö¸¦ Á¤ÀûÇÔ ¼ö·Î Á¤ÀÇÇÏ¸é µÇ´Â °ÍÀÌ´Ù. --------------------------------------- Á¤ÀûÇÔ¼ö´Â ƯÁ¤ ¸ðµâ Àü¿ëÀÇ ÇÔ¼öÀÌ´Ù. ----9----------------------------------- ´ÙÀ½À¸·Î, Á¤ÀûÇÔ¼ö¸¦ Á¤ÀÇ, ¼±¾ðÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù. * Á¤Àû ÇÔ¼öÀÇ Á¤ÀÇ static ÇÔ¼öÇü ÇÔ¼ö¸í(¸Å°³º¯¼ö ¸®½ºÆ®) { ...... } * Á¤Àû ÇÔ¼öÀÇ ¼±¾ð +--- ÇÔ¼ö ¿øÇü(prototype) | +---------------------------+-------+ static ÇÔ¼öÇü ÇÔ¼ö¸í(¸Å°³º¯¼ö ¸®½ºÆ®); Á¤ÀûÇÔ¼öµµ º¸ÅëÀÇ ÇÔ¼ö³ª ¿ÜºÎº¯¼öó·³ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¼±¾ð ÀÌ ºÒÇÊ¿äÇÑ ¿ÜºÎÁ¤Àûº¯¼ö¿Í´Â ´Þ¸® Á¤ÀûÇÔ¼ö´Â ¼±¾ðÀÌ ÇÊ¿äÇÏ´Ù. ±× ÀÌÀ¯ ´Â9 "Type mismatch in redeclaration" ¿¡·¯¸¦ ¸·±â À§ÇÔÀÌ´Ù. ¹°·Ð ¼±¾ðÀº ±× ¸ðµâ ¼±µÎ¿¡¼­ ÇàÇÏ´Â °ÍÀÌ °¡Àå ¹Ù¶÷Á÷ÇÏ´Ù. ±×·¯¸é <±×¸² 5> °°ÀÌ ÇÁ·Î±×·¥À» ±¸¼ºÇÒ ¶§ Á¤ÀûÇÔ¼öÀÇ ¼±¾ðÀº °ú¿¬ ¾îµð¿¡ µÎ¾î¾ß ÇÒ±î? Á¤ÀûÇÔ¼ö´Â ÀÚ½ÅÀÌ Á¤ÀÇµÈ ¸ðµâ ÀÌ¿ÜÀÇ ¸ðµâ¿¡ ÀڽŠÀÇ Á¸À縦 ¾Ë¸± ¼ö ¾øÀ¸¹Ç·Î <±×¸² 5>ÀÇ hd.h¿Í °°Àº Çì´õ È­ÀÏ¿¡ Á¤ÀûÇÔ ¼öÀÇ ¼±¾ðÀ» µÎ¾î¼­´Â ¾È µÈ´Ù. µû¶ó¼­ Á¤ÀûÇÔ¼öÀÇ ¼±¾ðÀº ±× ÀÚ½ÅÀÌ Á¤ÀÇ µÈ ¸ðµâÀÇ ¼±µÎ¿¡ µÎ´Â °ÍÀÌ °¡Àå ¹Ù¶÷Á÷ÇÑ ¹æ¹ýÀÌ´Ù. -------------------------------------9-------------------------------- 8 ±â¾ïºÎ·ù(storage class) --------------------------------------------------------------------- À̹ø ´Þ ¿¬ÀçÀÇ ºÎÁ¦¸ñÀÌ "±â¾ïºÎ·ùÀÇ Á¤º¹"ÀÓ¿¡µµ ºÒ±¸ÇÏ°í óÀ½ºÎÅÍ ÀÌÁ¦±îÁö ±â¾ïºÎ·ù¶ó´Â ¸»À» °ÅÀÇ ¾²Áö ¾Ê¾Ò´Âµ¥ ÀÌÁ¦¼­¾ß ºñ·Î¼Ò ±â¾ïºÎ ·ù¿¡ ´ëÇÏ¿© À̾߱âÇÏ°Ú´Ù. ±â¾ïºÎ·ù(storage class)¶ó´Â ¿ë¾î°¡ »ó´çÈ÷ »ý¼ÒÇÒ ÁÙ·Î ¾È´Ù. ±×·¯ ³ª ¸»¸¸ »ý¼ÒÇÒ »Ó ±× ¿ë¾îÀÇ °³³äÀº ÀÌ¹Ì ´Ù ÀÍÇû´Ù. ÀÏ´Ü º¯¼ö¸¦ ¿¹·Î µéÀÚ. º¯¼öÀÇ Á¾·ù´Â Å©°Ô ³ª´©¾î¼­ ÀÚµ¿º¯¼ö,¿Üº9κ¯¼ö, Á¤Àûº¯¼ö, ·¹Áö ½ºÅͺ¯¼ö(ÀÌ ±Û¿¡¼­´Â ¼³¸íÇÏÁö ¾Ê¾ÒÀ½)ÀÇ 4°¡Áö ºÎ·ù·Î ±¸ºÐµÈ´Ù. ±â¾ïºÎ ·ù(storage class)¶õ º° °Í ¾Æ´Ï¶ó ¹Ù·Î À̵é 4°¡Áö ºÎ·ù¸¦ ÅëƲ¾î¼­ ÀÏÄ ´Â ¿ë¾îÀÌ´Ù. ±â¾ïºÎ·ù´Â <Ç¥ 3>°ú °°ÀÌ ±× º¯¼ö³ª ÇÔ¼öÀÇ ÀúÀå Àå¼Ò¿Í ¼±¾ðÀÇ ¿µÇâ ÀÌ ¹ÌÄ¡´Â ¹üÀ§¿¡ µû¶ó ±¸ºÐµÈ´Ù. Âü°í·Î <Ç¥ 3>¿¡¼­ ±â¾ïºÎ·ùÁöÁ¤ÀÚ(stor age class specifier)¶õ auto, static, extern, register µîÀÇ Å°¿öµå¸¦ ÃÑĪÇÏ´Â ¿ë¾îÀÓÀ» ¾Ë¾ÆµÎ±â ¹Ù¶õ´Ù. <Ç¥ 3> 4°¡Áö ±â¾ïºÎ·ù¿Í ´ëÀÀÇÏ´Â ±â¾ïºÎ·ùÁöÁ¤ÀÚ -------------9--------------------------------------- ±â¾ïºÎ·ùÁöÁ¤ÀÚ º¯¼ö ÇÔ¼ö ---------------------------------------------------- auto ÀÚµ¿º¯¼ö x (automatic variable) extern ¿ÜºÎº¯¼ö (¿ÜºÎ)ÇÔ¼ö (external variable) static Á¤Àûº¯¼ö Á¤ÀûÇÔ¼ö (static variable) (static function) register ·¹Áö½ºÅͺ¯¼ö x (regist9er variable) ---------------------------------------------------- * auto Å°¿öµå´Â Ç×»ó »ý·« °¡´ÉÇÏ¸ç º¸Åë »ý·«ÇÑ´Ù. * static, register Å°¿öµå´Â »ý·«ÇÒ ¼ö ¾ø´Ù. * extern Å°¿öµå´Â º¯¼ö ¼±¾ð¿¡¸¸ ¾²ÀδÙ. À§ÀÇ <Ç¥ 3>¿¡ º¸À̵íÀÌ ÀÚµ¿ÇÔ¼ö³ª ·¹Áö½ºÅÍÇÔ¼ö´Â Á¸ÀçÇÏÁö ¾ÊÀ½À» ¾Ë ¼ö ÀÖ´Ù. 16ºñÆ®ÀÇ ·¹Áö½ºÅÍ¿¡ ¼ö¹é, ¼öõ ¹ÙÀÌÆ®ÀÇ ÇÔ¼ö¸¦ ÀúÀåÇÒ ¼ö ´Â ¾ø´Â ÀÏÀÌ¸ç ¶ÇÇÑ ½ºÅû󿡼­ »ý¼º, ¼Ò¸êÇÏ´Â ÇÔ¼ö°¡ Á¸ÀçÇÒ ¼öµµ ¾ø´Â ÀÏÀÌ´Ù. µû¶ó¼­ º¸Åë ÀϹÝÀûÀÎ ÇÔ¼ö´Â ±â¾ïºÎ·ù·Î µûÁöÀÚ¸é ¿ø·¡ ¸ðµÎ ¿Ü ºÎÇü9(external)ÀÌ´Ù. ´Ù¸¸ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¶§ static Å°¿öµå¸¦ ¾²¸é ±× ÇÔ ¼ö°¡ Á¤ÀûÇÔ¼ö°¡ µÉ »ÓÀÌ´Ù. ÇÔ¼ö´Â 2°¡ÁöÀÇ ±â¾ïºÎ·ù ¹Û¿¡ ¾ø´Âµ¥ ¹ÝÇÏ¿© º¯¼ö´Â ´Ù¾çÇÑ ±â¾ïºÎ·ù ¸¦ °¡Áø´Ù. ¿Ö³ÄÇÏ¸é ±â¾ïºÎ·ù¸¦ Á¶ÇÕÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾Æ·¡¿¡ °¡´ÉÇÑ Á¶ÇÕ ¹æ½ÄÀ» ¸ðµÎ ¼±º¸¿´´Ù. ¾Æ·¡¿¡¼­ ÇÑ °¡Áö À¯ÀÇÇÒ °ÍÀº auto¶ó´Â Å°¿ö µåÀÌ´Ù. »ç½Ç ¸ðµç ÀÚµ¿º¯¼ö´Â e¿Í °°ÀÌ auto Å°¿öµå¸¦ ½á¼­ ¼±¾ð(Á¤ÀÇ)µÇ ¾î¾ß ÇÑ´Ù. ±×·¯³ª ´ÙÇàÈ÷µµ auto Å°¿öµå´Â Ç×»ó »ý·« °¡´ÉÇϱ⠶§¹®¿¡ ¿© űîÁö ¿ì¸®´Â d¿Í °°ÀÌ auto¶ó´Â Å°¿öµå ¾øÀÌ 9ÀÚµ¿º¯¼ö¸¦ ¼±¾ð(Á¤ÀÇ)ÇÒ ¼ö ÀÖ¾ú´Ù. int a; <--- ¿ÜºÎº¯¼ö aÀÇ Á¤ÀÇ °â ¼±¾ð (´Ù¸¥ ¸ðµâ¿¡ ¾Ë·ÁÁú ¼ö ÀÖ´Ù) extern int b; <--- ¿ÜºÎº¯¼ö bÀÇ ¼±¾ð (Åë»ó b´Â ´Ù¸¥ ¸ðµâ¿¡ Á¤ÀǵǾî ÀÖÀ» °ÍÀÌ´Ù) static int c; <--- ¿ÜºÎÁ¤Àûº¯¼ö cÀÇ Á¤ÀÇ °â ¼±¾ð (´Ù¸¥ ¸ðµâ¿¡´Â ¾Ë·ÁÁöÁö ¾Ê´Â´Ù) void main(void) { int d; <--- ÀÚµ¿º¯¼ö dÀÇ Á¤ÀÇ °â ¼±¾ð auto int e; <--- ÀÚµ¿º¯¼ö eÀÇ Á¤ÀÇ °â ¼±¾ð(auto´Â »ý·« °¡´É) static9 int f; <--- ³»ºÎÁ¤Àûº¯¼ö fÀÇ Á¤ÀÇ °â ¼±¾ð register int g; <--- ·¹Áö½ºÅͺ¯¼ö gÀÇ Á¤ÀÇ °â ¼±¾ð ...... } ´ÙÀ½À¸·Î, º¯¼öÀÇ ±â¾ïºÎ·ù¸¦ ¼±ÅÃÇÏ´Â ¿ä·É¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ÀÚ. º¯¼ö ÀÇ ±â¾ïºÎ·ù¸¦ ¼±ÅÃÇÏ´Â µ¥ À־ ±âº» ¿øÄ¢Àº ´ÙÀ½°ú °°´Ù. ¿Ö ÀÌ·± ¿ø Ä¢ÀÌ Á¤´çÇÑ°¡ ÇÏ´Â ÀÌÀ¯´Â µ¶ÀÚ ½º½º·Î »ý°¢Çغ¸±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- [1] ÇÇÄ¡ ¸øÇÒ °æ¿ì¸¦ Á¦¿ÜÇÏ°í´Â °¡´ÉÇÑ ÇÑ ÀÚµ¿º¯¼ö¸¦ ÅÃÇÑ´Ù. [2] ¿ÜºÎº¯¼öÀÇ »ç¿ëÀº ÃÖ´ëÇÑ ÀÚÁ¦ÇÏ°í 9°ø¿ë¼ºÀÌ ¸Å¿ì ³ôÀº º¯¼ö¿¡ ÇÑÇØ ¿ÜºÎº¯¼ö·Î Á¤ÀÇÇÑ´Ù. [3] ÃʱâÈ­°¡ ²À ÇÊ¿äÇϰųª °ø¿ë¼ºÀ» °¡Áö´Â ¹è¿­Àº ÁÖ·Î ¿ÜºÎÇüÀ¸·Î Á¤ ÀÇÇÑ´Ù. ÃʱâÈ­µÉ ÇÊ¿ä°¡ ¾ø°Å³ª °ø¿ë¼ºÀÌ °ÅÀÇ ¾ø´Â ¹è¿­Àº °¡±ÞÀû ÀÚµ¿¹è¿­·Î ¼±¾ðÇϵµ·Ï ÇÑ´Ù. [4] ¸ðµç ¿ÜºÎº¯¼ö(Á¤Àûº¯¼ö Æ÷ÇÔ)´Â °¡´ÉÇÑ ÇÑ ÃʱâÈ­¸¦ ÇÑ´Ù. [5] ¿ÜºÎº¯¼ö´Â °¡´ÉÇÑ ÇÑ Àбâ Àü¿ë(read only)À¸·Î »ç¿ëÇÑ´Ù. [6] ƯÁ¤ ¿ÜºÎº¯¼öÀÇ °ªÀ» º¯°æÇÏ´Â ÇÔ¼ö´Â °¡´ÉÇÑ ÇÑ ÇϳªÀÇ ÇÔ¼ö·Î Á¦ÇÑ ÇÑ´Ù. [7] ÀÚµ¿º¯¼öÀÇ °ªÀ» º¸Á¸ÇÒ ÇÊ¿ä°¡ ÀÖÀ» °æ¿ì ³»ºÎÁ¤Àûº¯9¼ö·Î Á¤ÀÇÇÑ´Ù. [8] ÇÁ·Î±×·¥ÀÌ ÇϳªÀÇ ¸ðµâ·Î ±¸¼ºµÇ¾î ÀÖÀ» °æ¿ì ¿ÜºÎÁ¤Àûº¯¼ö¸¦ »ç¿ëÇÒ ÇÊ¿ä´Â ÀüÇô ¾ø´Ù. --------------------------------------------------------------------- ±× ¹Û¿¡ ÇÔ¼öÀÇ Çü½Ä¸Å°³º¯¼ö(formal parameter)´Â ±â¾ïºÎ·ù·Î µûÁöÀÚ ¸é ÀÚµ¿º¯¼ö¿¡ ÇØ´çµÇ¸ç, »ó¼ö Áß¿¡¼­ ¹®ÀÚ¿­ »ó¼ö(string constant)ÀÇ °æ ¿ì ÀúÀå Àå¼Ò°¡ Á¤Àû µ¥ÀÌÅÍ ¿µ¿ªÀ̱⠶§¹®¿¡ ±× ±â¾ïºÎ·ù´Â Á¤Àû(static) ÀÓÀ» Âü°íÇϱ⠹ٶõ´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #25 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ1-5: ±â¾ïºÎ·ùÀÇ Á¤º¹ 03/06 00:42 161 line --------------------------------------------------------------------- 9 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- À̻󿡼­ CÀÇ ±â¾ïºÎ·ù¿¡ ´ëÇØ ÀÚ¼¼È÷ »ìÆ캸¾Ò´Âµ¥, ÀÌ°Ç ¿¬½À °ÔÀÓ ¿¡ ºÒ°úÇÏ´Ù. »ç½Ç À̹ø ´Þ ¾ê±â´Â ´ÙÀ½ ´ÞÀÇ ¾ê±â¸¦ ²ø¾î³»±â À§ÇÑ ÀüÃÊ Àü ¼º°ÝÀ» ¶ç°í À־ ¶Ñ·ÇÇÏ°Ô "¹Ù·Î ÀÌ°Å´Ù!"ÇÏ°í ¾ò¾î ³¾ ¼º°ú´Â ±×¸® º¯º¯Ä¡ ¸øÇÒ °ÍÀ¸·Î ¿©°ÜÁø´Ù. ±×·¯³ª ±â¾ïºÎ·ù¿¡ °üÇÑ »çÇ×À» öÀúÇÏ°Ô ÆľÇÇÏ°í ÀÖ¾î¾ß ¾ÕÀ¸·Î Àü°³ÇØ ³ª°¥ ³»¿ëÀ» ÃæºÐÈ÷ ÀÌÇ2ØÇÒ ¼ö ÀÖ°Ô µÈ´Ù ´Â Á¡À» ¸í½ÉÇϱ⠹ٶó¸ç, ´ÙÀ½ ´ÞºÎÅÍ´Â ´ë·« 3ȸ¿¡ °ÉÃÄ À̹ø ¿¬ÀçÀÇ ÇÏ À϶óÀÌÆ®ÀÎ "CÀÇ ´ë¸í»ç Æ÷ÀÎÅÍ"¿¡ °üÇÏ¿© ÁýÁßÀûÀ¸·Î Ž±¸Çغ¼ »ý°¢ÀÌ´Ù. ½ÃÁß¿¡ ³ª¿ÍÀÖ´Â ¾î¶°ÇÑ C °ü°è ¼­Àûº¸´Ùµµ ÇÑÃþ ü°èÀûÀÌ°í ³í¸®ÀûÀÌ°í ºÐ¼®ÀûÀ¸·Î Æ÷ÀÎÅÍÀÇ ¸ðµç °ÍÀ» Çϳªµµ ³²±è¾øÀÌ ³¹³¹ÀÌ ÆÄÇØÃÄ ³ª°¥ ÀÛÁ¤ ÀÌ´Ï ±â´ëÇصµ ÁÁÀ» ¼º ½Í´Ù. ¹Ù¾ßÈå·Î µ¶ÀÚ ¿©·¯ºÐµµ ÀÌÁ¦ Æ÷ÀÎÅ͸¦ ¿ÏÀü È÷ Á¤º¹ÇÒ ¼ö ÀÖ°Ô µÈ °ÍÀÌ´Ù! --------------------------------------------------------------------- ºÎ·Ï ´ýÀ¸·Î 2 --------------------------------------------------------------------- ÇÊÀÚ°¡ À̹ø ¿¬À縦 ¸ÃÀ¸¸é¼­ ¸¶¼Ò ÆíÁýºÎ¿¡ ÇÑ °¡Áö ¹°¾îº» °Ô ÀÖ´Ù. ±×°ÍÀº ¸¶¼ÒÀÇ µ¶ÀÚµéÀÌ ±ÛÀÇ ³»¿ëÀ» ¶°³ª¼­ ÀϹÝÀûÀ¸·Î °¡Àå ¼±È£ÇÏ´Â °Ô ¹¹³Ä´Â ¹°À½À̾ú´Ù. ±×·¨´õ´Ï ¸¶¼Ò ÆíÁýºÎ ¿Ð, "¹º°¡ º¸¿©Áà¾ß ÇÑ´Ù"´Â ÀÀ ´äÀ» ¾ò¾ú´Ù. ¸»ÀÎ Áï µ¶ÀÚÀÇ ´«À» Áñ°Ì°Ô ÇØÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ±×·¸ ´Ù¸é ´«À» Áñ°Ì°Ô ÇØÁÖ´Â °¡Àå ½¬¿î ¹æ¹ýÀÌ ¹«¾ùÀΰ¡? ±×°Ç ¹Ù·Î ±×·¡ÇÈÀÌ ¾Æ´Ñ°¡? ¸¶Ä§ À̹ø ´ÞÀÇ ±ÛÀÌ ´Ù¼Ò ºüµíÇؼ­ º¯º¯ÇÑ ¿¹Á¦ Çϳª¾2ø´ø Â÷¿¡ ÀßµÆ ´Ù ½Í¾î, ´ýÀ¸·Î º¼¸¸ÇÑ ±×·¡ÇÈ ¿¹Á¦¸¦ Çϳª ¼Ò°³Çϱâ·Î ÇÑ´Ù. Çϱâ»ç ÀÌ ¹ø ¿¹Á¦°¡ ¸¸µé¾î ³»´Â ±×¸²ÀÌ¾ß ÈçÇÏ°Ô º» °ÍÀÏÅ×Áö¸¸, º£ÀÌÁ÷À̳ª ÆĽº Ä®ÀÌ ¾Æ´Ñ Åͺ¸ C¿¡¼­ »õ·ÎÀÌ "½ÇÇà½ÃÄѺ¸´Â Àç¹Ì" ¶ÇÇÑ ¸¸¸¸Ä¡ ¾ÊÀ¸¸®¶ó º»´Ù. Àϴܦ¡Àº ¿¹Á¦ÀÇ ³»¿ë¿¡ ÀÏü ½Å°æ¾²Áö¸»°í ±×Àú ½ÇÇàÀÌ µÈ´Ù´Â »ç ½ÇÀ» Áñ±â±â ¹Ù¶õ´Ù. ¿ì¼± ¿¹Á¦¸¦ sombrero.c¶ó´Â È­ÀϸíÀ¸·Î ÀԷºÎÅÍ Çϱ⠹ٶõ´Ù. ´Ù ÀÔ ·ÂÇÏ°í µð½ºÅ©¿¡ ¼¼À̺êÇßÀ¸¸é, Å°¸¦ ´­·¯ µµ½º·Î ºüÁ®³ª°¡¼­ ÇöÀç µð·ºÅ丮(current directory)¿2¡ herc.bgi¶ó´Â ±×·¡ÇÈ µå¶óÀ̹ö(graph ics driver) È­ÀÏÀÌ ÀÖ´ÂÁö Á¡°ËÇÑ´Ù. ÀÌ È­ÀÏÀÌ ¾øÀ¸¸é ¿¹Á¦°¡ ½ÇÇàµÇÁö ¾Ê´Â´Ù. EGA »ç¿ëÀÚ¶ó¸é ±×°Í ´ë½Å¿¡ egavga.bgi¶ó´Â ±×·¡ÇÈ µå¶óÀ̹ö È­ ÀÏÀÌ ÇÊ¿äÇÏ´Ù. Á¡°ËÇßÀ¸¸é µµ½º ¸í·ÉÇà¿¡ exit¢¢¸¦ ÀÔ·ÂÇÏ¿© Åͺ¸ C ÅëÇÕ °³¹ßȯ°æ(¾àĪ IDE)À¸·Î µÇµ¹¾Æ¿Â´Ù. ±×·± ´ÙÀ½, ¸¸¾à µ¶ÀÚÀÇ Åͺ¸ C°¡ ¹öÀü2.0À̶ó¸é, Å°¸¦ ´­·¯ ÄÄÆÄÀÏ ¡Ý¸µÅ©°¡ ¹«»çÈ÷ ³¡³ª´Â°¡ È®ÀÎÇÏ°í Å°¸¦ ´­·¯¼­ ¿¹Á¦¸¦ ½ÇÇà½Ã Ų´Ù. ¸¸¾à Åͺ¸ C 1.5¶ó¸é ¾Æ·¡ µÎ ÁÙÀÇ Â©¸·ÇÑ ³»¿ëÀ» somb2rero.prj¶ó´Â È­ÀϸíÀ¸·Î ÀÔ·ÂÇÑ µÚ Å°¸¦ ´­·¯ µð½ºÅ©¿¡ ¼¼À̺ê½ÃŲ´Ù. --------------------------------------------------------------------- sombrero graphics.lib --------------------------------------------------------------------- ÀÌÁ¦ ¸¦ ´­·¯ "Project" ¸Þ´º¸¦ ¼±ÅÃÇÏ°í °ðÀ̾î "Project nam e" Ç׸ñÀ» ÅÃÇÑ´Ù. ±×·¯¸é IDE°¡ ÇÁ·ÎÁ§Æ® È­ÀϸíÀÇ ÀÔ·ÂÀ» ¿ä±¸Çϴµ¥ so mbrero¢¢¶ó°í ÀÔ·ÂÇÏ¸é µÈ´Ù. ±×·± ´ÙÀ½ Å°¸¦ ´­·¯ ÄÄÆÄÀϡݸµÅ©°¡ ¹« »çÈ÷ ³¡³ª´ÂÁö È®ÀÎÇÏ°í Å°¸¦ ´­·¯2 ¿¹Á¦¸¦ ½ÇÇà½ÃŲ´Ù. ±×·¯¸é È­ ¸é °¡µæÈ÷ ±Ù»çÇÑ ¸ß½ÃÄÚ ¸ðÀÚ°¡ ±×·ÁÁú °ÍÀÌ´Ù. Âü°í·Î µµ(degree)´ÜÀ§ÀÇ °¢µµÀÎ ¸ÅÅ©·Î »ó¼ö ZROTATE, YROTATE, XROTATEÀÇ °ªÀ» ¼öÁ¤ÇÏ¸é ¶Ç´Ù¸¥ °¢µµ¿¡¼­ ¹Ù¶óº» ¸ß½ÃÄÚ ¸ðÀÚÀÇ ±×¸²À» ¾òÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î XROTATE ¸¦ 180.À¸·Î º¯°æÇÏ¸é ¸ðÀÚ°¡ µÚÁý¾îÁø´Ù. <¸®½ºÆ® 1> ±×·¡ÇÈ ¿¹Á¦ ÇÁ·Î±×·¥ --------------------------------------------------------------------- /* File SOMBRERO.C: Sombrero - HGC/EGA version */ #include -+-±×·¡ÇÈ ÇÔ¼ö¿Í ¼öÇÐ ÇÔ¼öÀ2Ç ¼±¾ðÀÌ µé¾îÀÖÀ½ #include -+ +-----ºÒ¸°ÇüÀ» Á¤ÀÇ typedef enum {false, true} boolean; void graph(double y, double z, int *plotted); -+ void rotate3d(double xr, double yr, double zr, | ÇÔ¼ö ¼±¾ð double *px, double *py, double *pz);-+ /* |z */ ÀÌ ¿¹Á¦¿¡¼­ #define SIZE 2. /* | */ ¾²ÀÎ 3Â÷¿ø ÁÂÇ¥°è #define ZROTATE 11. /* | */ 2 ±×·¡ÇÈ È­¸éÀº #define YROTATE 40. /* +------ y */ yzÆò¸é¿¡ ÇØ´çÇÔ #define XROTATE 0. /* / */ /* / */ /* x */ double function(double x, double y) ¸ß½ÃÄÚ ¸ðÀÚ¸¦ ³ªÅ¸³»´Â { 3Â÷¿ø Æò¸éÀÇ ½Ä double f; f = hypot(x, y) / 35.; if (fabs(f) < 1.e-5) return (40. * M_PI); else return (40. * sin(f * M_PI) / 2f); } void main(void) { ÀÚµ¿º¯¼ö¸¦ ¼±¾ð(Á¤ÀÇ) int graphdrive = DETECT, graphmode; int plotted = false; ---- °î¼±ÀÇ ½ÃÀÛÁ¡ÀÎÁöÀÇ ¿©ºÎ¸¦ °¡¸² double x, y, z, x2, y2, z2; ---- 3Â÷¿ø ÁÂÇ¥ double zr, yr, xr; ---- °¢°¢ zÃà, yÃà, xÃàÀ» Áß½ÉÀ¸·Î Çϴ ȸÀü°¢ initgraph(&graphdrive, &graphmode, ""); zr = ZROTATE * M_PI / 180.; -+ yr = YROTATE * M_PI / 180.; | ¶óµð¾È °ªÀ¸·Î ȯ»ê xr = XROTATE * M_PI / 180.; -+ for (x = -115.2; x <= 115.; x += 5.) { for (y = -115.; y <= 115.; y += 5.) { z = function(x, y); x2 = x * SIZE; -+-- ÁÂÇ¥¸¦ SIZE¹è¸¸Å­ È®´ë y2 = y * SIZE; | zÃà, yÃà, xÃàÀ» Áß½ÉÀ¸·Î °¢°¢ z2 = z * SIZE; -+ | ȸÀü rotate3d(xr, yr, zr, &x2, &y2, &z2);-+ graph(y2, z2, &plotted); ---+ } 3Â÷¿ø °î¼±À» plotted = false; yzÆò¸é¿¡ Åõ¿µÇÑ Á¤»ç¿µÀ» È­¸é¿¡2 ±×¸² } | +-»õ·Î¿î °î¼±À» ±×¸² getch(); closegraph(); ---- ±×·¡ÇÈ ½Ã½ºÅÛÀ» Á¾·á } /* Rotation order : z axis -> y axis -> x axis */ void rotate3d(double xr, double yr, double zr, double *px, double *py, double *pz) { double x = *px, y = *py, z = *pz; double x1, y1, z1, x2, y2, z2, x3, y3, z3; x1 = x * cos(zr) - y * sin(zr); -+ y1 = x * sin(zr) + y * cos(zr); | zÃàÀ» Áß½ÉÀ¸·Î zr¸¸Å­ ȸÀü z12 = z; -+ x2 = x1 * cos(yr) - z1 * sin(yr); -+ y2 = y1; | yÃàÀ» Áß½ÉÀ¸·Î yr¸¸Å­ ȸÀü z2 = x1 * sin(yr) + z1 * cos(yr); -+ x3 = x2; -+ y3 = y2 * cos(xr) - z2 * sin(xr); | xÃàÀ» Áß½ÉÀ¸·Î xr¸¸Å­ ȸÀü z3 = y2 * sin(xr) + z2 * cos(xr); -+ *px = x3; -+ *py = y3; | ½Ç¸Å°³º¯¼ö x2, y2, z2¿¡ °ªÀ» ´ëÀÔ *pz = z3; -+ (actual parameter) } void graph(double y, double z, int *p2lotted) { int xx, yy, xasp, yasp; getaspectratio(&xasp, &yasp); ---- È­¸éÀÇ Á¾È¾ºñ¸¦ ±¸ÇÔ xx = getmaxx() / 2 + (int)y; yy = getmaxy() / 2 - (int)(z * xasp / yasp); if (*plotted == false) moveto(xx, yy); --- CP¸¸ À̵¿ else lineto(xx, yy); ---- °î¼±ÀÇ ½ÃÀÛÀÌ ¾Æ´Ï¸é ¼±À» ±×¸² *plotted = true; } --------------------------------------------------------------------- <Á¦1ȸ ³¡> ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #26 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ2-1: Æ÷ÀÎÅÍ ¿¬»êÀÇ Á¤º¹ 03/06 00:44 242 line ÀÛ¼º ¿¬¿ùÀÏ: 1989.8.27 ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1989.10 HWP/TXT º¯È¯: 1993.3.5 >>> Á¤º¹ Åͺ¸ C <<< Á¦2ȸ Æ÷ÀÎÅÍ ¿¬»ê(pointer operation)ÀÇ Á¤º¹ ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú3) --------------------------------------------------------------------- 1 º»·Ð¿¡ ¾Õ¼­ --------------------------------------------------------------------- Àú¹ø ´Þ¿¡´Â ÀÔ°¡½ÉÀ¸·Î ±â¾ïºÎ·ùÀÇ Á¤º¹¿¡ ´ëÇÏ¿© ³íÇß´Ù. Ȥ½Ã ÀÔ°¡ ½ÉÇÒ ¶§ºÎÅÍ ¿ïÄÀÇ2Ï°í üÇÏÁö³ª ¾Ê¾Ò´ÂÁö ¸ð¸£°Ú´Ù. ¾Æ¹¸µç ÀÔ°¡½ÉÀ» ¾Æ¹« Å» ¾øÀÌ ¸¶Ä£ »ç¶÷¿¡ ÇÑÇØ À̹ø ´Þ¿¡´Â CÀÇ ´ë¸í»çÀÎ Æ÷ÀÎÅÍÀÇ È°¿ë¹ýÀ», ÀÏ´ÜÀº ¹®ÀÚ¿­À» ´Ù·ç´Â µ¥¿¡¸¸ ±¹ÇѽÃÄѼ­ ¾Ë¾Æº» µÚ¿¡, °ðÀÌ¾î º»°ÝÀûÀ¸ ·Î Æ÷ÀÎÅÍ ¿¬»êÀ» ¼³¸íÇÒ ÀÛÁ¤ÀÌ´Ù. ¿¹ÃøÄÁµ¥ ¿­½ÉÈ÷ ³ë·ÂÇÏ¸é ´ë·« »çÈê ¾È¿¡ ÀÌ ±ÛÀ» Á¤º¹ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ³ëÆĽɿ¡¼­ ÇÏ´Â ¸»Àε¥ ¹è¿ò¿¡´Â ¿Õµµ°í ³ª¹ßÀÌ°í ÀÏü ¾ø´Ù´Â Á¡À» ¸í½ÉÇϱ⠹ٶõ´Ù. --------------------------------------------------------------------- 2 CÀÇ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ ------2--------------------------------------------------------------- ¹®ÀÚ¿­À» ´Ù·ç´Â Æ÷ÀÎÅ͸¦ Ưº°È÷ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ(string pointer)¶ó°í ÇÑ´Ù. ¹®ÀÚ¿­ Æ÷ÀÎÅ͸¦ ´Ù·ç±â À§Çؼ­ <¿¹Á¦ 1>À» ÀÔ·ÂÇÑ ´ÙÀ½ ½ÇÇà½ÃÄÑ º¸±â ¹Ù¶õ´Ù. »õ»ï½º·´°ÚÁö¸¸ ±× ¹æ¹ýÀº ÀÌ·¸´Ù. ¿ì¼± Åͺ¸ C¸¦ ±âµ¿ÇÏ°í Åͺ¸ ¿¡µðÅÍ¿¡¼­ <¿¹Á¦ 1>À» ÀÔ·ÂÇÑ ´ÙÀ½ Å°·Î µð½ºÅ©¿¡ ÀúÀåÇÑ´Ù. ÀÌ ¶§ Çà¹øÈ£±îÁö ÀÔ·ÂÇÏ¸é ¾È µÈ´Ù. ±× ÈÄ Å°¸¦ ´­·¯ ÄÄÆÄÀϡݸµÅ©ÇÏ´Â µ¥, ³¡³ª¸é ¿¡·¯°¡ ÀÖ´ÂÁö È®ÀÎÇÏ°í ¿¡·¯°¡ ¾øÀ¸¸é ½ÇÇà½ÃŲ´Ù. Åͺ¸ C 1. 52¿¡¼­´Â Å°¸¦, Åͺ¸ C 2.0¿¡¼­´Â Å°¸¦ ´©¸£¸é ¿¹Á¦°¡ ½Ç ÇàµÉ °ÍÀÌ´Ù. ±× ½ÇÇà °á°ú°¡ Á¦´ë·Î ³ª¿Ô´ÂÁö ºñ±³Çغ¸±â ¹Ù¶õ´Ù. <¿¹Á¦ 1> °¢Á¾ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ ¿¬»ê --------------------------------------------------------------------- 1: #define STRINGLEN 21 2: 3: void main(void) 4: { 5: unsigned char chararray[STRINGLEN + 1]; 6: unsigned char *ps; 7: 8: clrscr(); <--- È­¸é Àüü¸¦ Áö¿ì´Â ÇÔ¼ö 9: 10: strcpy(chararray, "Welcome to my world !"); 11: p2s = chararray; 12: 13: printf("%s\n", chararray); 14: printf("%s\n", ps); 15: 16: printf("String length of ps: %d\n", strlen(ps)); 17: printf("String length of chararray: %d\n", strlen(chararray)); 18: printf("ps[0]: '%c'\n", ps[0]); 19: printf("ps[12] '%c', chararray[12] '%c'\n", ps[12], chararray[12 ); 20: printf("End of ps: %d\n", ps[strlen(ps)]); 21: } --------------------------------------------------------------------- <¿¹Á¦ 1>ÀÇ ½ÇÇà °á°ú 2 Welcome to my world ! Welcome to my world ! String length of ps: 21 String length of chararray: 21 ps[0]: 'W' ps[12] 'y', chararray[12] 'y' End of ps: 0 --------------------------------------------------------------------- 2.1 Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ ÀÚ, ±×·³ ÀÌÁ¦ºÎÅÍ <¿¹Á¦ 1>À» Á¶¸ñÁ¶¸ñ ºÐ¼®ÇØ º¸±â·Î ÇÑ´Ù. 5: unsigned char chararray[STRINGLEN + 1]; 6: unsigned char *ps; 5~6ÇàÀº ¹®ÀÚ ¹è¿­ chararray¿Í ¹®ÀÚ¿­ Æ÷ÀÎÅÍ ps¸¦ Á¤ÀÇÇÑ´Ù. ÀϹÝÀû À¸·Î ´Ü¼ø ¹2®ÀÚ¿­ Æ÷ÀÎÅÍÀÇ Á¤ÀÇ´Â ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù. --------------------------------------------------------------------- char *Æ÷ÀÎÅ͸í, *Æ÷ÀÎÅ͸í, ......; +---+ ¶Ç´Â +---- Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ´ë»óü(object)ÀÇ µ¥ÀÌÅÍÇü +---+ unsigned char *Æ÷ÀÎÅ͸í, *Æ÷ÀÎÅ͸í, ......; --------------------------------------------------------------------- ÀÌ¿Í °°ÀÌ ´Ü¼ø ¹®ÀÚ¿­ Æ÷ÀÎÅÍÀÇ Á¤ÀÇ´Â ¿ª½Ã³ª ´Ü¼øÇÏ´Ù. Áï Æ÷ÀÎÅÍ ¸í(Æ÷ÀÎÅÍ º¯¼ö¸í) ¹Ù·Î ¾Õ¿¡ ±¸µÎÁ¡(punctuator) *¸¸ °®´Ù ºÙÀÌ´Â °Ô Àü ºÎ2ÀÌ´Ù. 2.2 Æ÷ÀÎÅÍÀÇ ÀÇ¹Ì ±×·³ ¿©±â¼­ Æ÷ÀÎÅÍÀÇ ¸» ¶æÀ» ¾Ë¾Æº¸ÀÚ. <±×¸² 1> Æ÷ÀÎÅÍ´Â °ð ¹øÁö´Ù. +-------------------------------+ | | | Æ÷ÀÎÅÍ == ¹øÁö | | | | the Pointer the Address | | | +-------------------------------+ --------------------------------------------------------------------- * ÇÑ ¸¶µð·Î Æ÷ÀÎÅÍ´Â ¹øÁö(address, ÁÖ¼Ò)¿¡ ´ëÇÑ ±âȣȭµÈ Ç¥ÇöÀÌ´Ù.2 Áï Æ÷ÀÎÅÍ´Â °ð ¹øÁö¶ó ÇÒ ¼ö ÀÖ´Ù. * Æ÷ÀÎÅÍ º¯¼ö¶ó´Â °ÍÀº ÇÑ ¸¶µð·Î Æ÷ÀÎÅÍ, Áï ¹øÁö°ªÀ» ÀúÀåÇÏ´Â º¯¼öÀÌ ´Ù. ±×·±µ¥ Ưº°ÇÑ ¾ð±Þ¾øÀÌ ±×³É Æ÷ÀÎÅͶó°í¸¸ Çϸé Æ÷ÀÎÅÍ º¯¼ö, Æ÷ ÀÎÅÍ »ó¼ö³ª ±âŸ ¸ðµç ¹øÁö°ª µîÀ» ÀÏÄ´ °ÍÀÓ¿¡ À¯ÀÇÇÑ´Ù. --------------------------------------------------------------------- ±×·³ ¹øÁö¶õ ¹«¾ùÀΰ¡? ÇÑ ¸¶µð·Î ¹øÁö´Â ¸Þ¸ð¸®»óÀÇ Æ¯Á¤ À§Ä¡¸¦ ¼ý ÀÚ(ÁÖ·Î 16Áø¼ö)·Î Ç¥ÇöÇÑ °ÍÀÌ´Ù. ±×°Ç ±×·¸°í <¿¹Á¦ 1>ÀÇ ¼³¸íÀ» °è¼Ó ÁøÇàÇϱ⿡ ¾Õ¼­ Àá½Ã µý ¾ê±â Á»2 ÇÏ°Ú´Ù. ¿¹ÄÁµ¥ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼ö ptrÀ» ¾Æ·¡¿Í °°ÀÌ Á¤ÀÇÇÏ¸é º¯¼ö ptrÀÌ ÀϹÝÀûÀÎ ¼öÄ¡°¡ ¾Æ´Ñ ¹øÁö°ª(Æ÷ÀÎÅÍ)¸¸À» ÀüÀûÀ¸·Î ´Ù·ç´Â º¯¼öÀÓ À» ºí·° ³»¿¡ ¼±¾ðÇÏ´Â °ÍÀÌ µÈ´Ù. char *ptr; ÀÌ ¶§ "Æ÷ÀÎÅÍ´Â ¹øÁö°ªÀ» ³ªÅ¸³¾ »ÓÀε¥ ¾î°¼­ Æ÷ÀÎÅÍ ptrÀ» Á¤ÀÇÇÒ ¶§ ptrÀÌ °¡¸®Å°´Â ´ë»óü(object)ÀÇ µ¥ÀÌÅÍÇüÀÎ char¸¦ ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÏ ´Â°¡"¶ó´Â Àǹ®Á¡Àº ÀÌ ±Û µÞºÎºÐ¿¡¼­ ¼³¸íÇϱâ·Î ÇÏ°í ¿©±â¼­´Â ±×Àú ±× ·Á·Á´ÏÇϱ⠹ٶõ´Ù. 2.3 ´ëÀÔ½ÄÀÇ ÀÇ¹Ì ¿ì¸®°¡ ÁÖ¸ñÇÒ Á¡Àº °ú¿¬ ¾Æ·¡ÀÇ ´ëÀÔ½Ä, 2 ptr = "I'm a Rambo III"; °¡ ÀǹÌÇÏ´Â ¹Ù°¡ ¹«¾ùÀÌ³Ä ÇÏ´Â °ÍÀÌ´Ù. ÆĽºÄ®ÀÇ ÀÔÀå¿¡¼­ µûÁö¸é ¾Æ¸¶ ¹®ÀÚ¿­ ptr¿¡ ¹®ÀÚ¿­ »ó¼ö "I'm a Rambo III"¸¦ ´ëÀÔ(º¹»ç)ÇÏ´Â °ÍÂëÀ¸·Î Çؼ®ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª C¿¡¼­´Â ºÐ¸íÈ÷ ¾Æ´Ï´Ù. ¿Ö³ÄÇϸé ptrÀº ¹®ÀÚ¿­ º¯¼öµµ ¾Æ´Ï°í, ¶Ç C¿¡´Â ¹®ÀÚ¿­ ¿¬»êÀÚ°¡ Àü¹«ÈĹ«Çϱ⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î =´Â ºÐ¸íÈ÷ ÆĽºÄ®¿¡¼­Ã³·³ ¹®ÀÚ¿­À» º¹»ç(´ëÀÔ)ÇÏ´Â ¿¬»êÀÚ°¡ °á´ÜÄÚ ¾Æ´Ï´Ù. ±×·³ = ¿¬»êÀÚ°¡ C¿¡¼­´Â µµ´ëü ¾î¶°ÇÑ ÀÏÀ» ÇÒ±î? ptr = "I'm a Rambo III"´Â "I'm a R2ambo III"¶ó´Â ¹®ÀÚ¿­ÀÌ ÀúÀåµÇ¾î ÀÖ´Â ¸Þ¸ð¸®»óÀÇ ¼±µÎ¹øÁö¸¦ Æ÷ÀÎÅÍ ptr¿¡ ´ëÀÔÇ϶ó´Â ¼ö½ÄÀÌ´Ù. ÀÌ ¼ö½Ä ÀÌ ½ÇÇàµÇ¸é ¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼ö ptrÀº ±× ¹®ÀÚ¿­ »ó¼öÀÇ ¼±µÎ ¹øÁö°ªÀ» °¡Áö°Ô µÈ´Ù. ½±°Ô ¸»Çؼ­ ¹®ÀÚ¿­ÀÇ Ã¹¹®ÀÚÀÎ 'I'°¡ ÀúÀåµÇ¾î ÀÖ´Â ¹øÁö°ª ÀÌ ptr¿¡ ´ëÀԵȴٴ ¶æÀÌ´Ù. ´ëÀÔ ¿¬»êÀÚ¸¸ °¡Áö°í´Â ÆĽºÄ® °æ¿ìó·³ ¹® ÀÚ¿­ Åëä·Î º¹»ç(´ëÀÔ)µÇ´Â ÀÏÀÌ Àý´ë ¹ß»ýÇÏÁö ¾Ê´Â´Ù(strcpy ÇÔ¼ö¸¦ ½á ¾ß ÇÑ´Ù). <±×¸² 2> ´ëÀÔ½ÄÀÇ ÀǹÌ(´ëÀÔµµ ÀÏÁ¾ÀÌ ¼ö½ÄÀÓ) ------------------------------------------------2--------------------- +-----³Î Á¾·á¹®ÀÚ ptr = "I'm a Rambo III" | | | +--------+ ¼±µÎ¹øÁö°ª +---+----------------+-+--+ | |<-------------+ I | 'm a Rambo III | \0 | +--------+ ´ëÀÔ +---+----------------+----+ ¹®ÀÚ¿­ »ó¼ö "..."°¡ ¼ö½Ä¿¡ »ç¿ëµÇ¾úÀ» ¶§ "..." ÀÚü´Â ±× ¹®ÀÚ¿­ÀÌ2 ÀúÀåµÇ¾î ÀÖ´Â ¸Þ¸ð¸®»ó À§Ä¡ÀÇ ¼±µÎ¹øÁö°ªÀ» °¡Áø´Ù. --------------------------------------------------------------------- <±×¸² 3> ´ëÀÔ½ÄÀÇ °á°ú(½ÇÁ¦ »óȲ) --------------------------------------------------------------------- +-----³Î Á¾·á¹®ÀÚ Æ÷ÀÎÅÍ ptr "I'm a Rambo III" | +--------+ +---+----------------+--+-+ | ¹øÁö°ª | | I | 'm a Rambo III | \0 | +--------+ +---+---2-------------+----+ --------------------------------------------------------------------- Á»ÀüÀÇ ´ëÀÔ½ÄÀÇ °á°ú·Î ÀÎÇØ, "ÀÌÁ¦ Æ÷ÀÎÅÍ º¯¼ö ptrÀº ¹®ÀÚ¿­ÀÇ ¼±µÎ¹®ÀÚ 'I'°¡ ÀúÀåµÇ¾î ÀÖ´Â À§ Ä¡ÀÇ ¹øÁö°ªÀ» °¡Áö°Ô µÇ¾ú´Ù." ¶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥ Àдٺ¸´Ï±î ¸»ÀÌ ³Ê¹« ±æ´Ù°í »ý°¢µÇÁö ¾Ê´Â °¡? ÀÌ ¸»À» CÀÇ ¼¼°è¿¡¼­´Â À¯½ÄÇÏ°í ¸ÚÁö°Ô ´ÙÀ½°ú °°ÀÌ ¸»ÇÑ´Ù. "ÀÌÁ¦ Æ÷ÀÎÅÍ ptrÀº ¹®ÀÚ¿­ÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å°°Ô(point) µÇ¾ú´Ù." ¸»ÀÌ ÂüÀ¸·Î °£°áÇÏÁö ¾ÊÀº°¡? ÀÌ ¸»À» º¸±â ÁÁ°2Ô ±×¸²À¸·Î Ç¥ÇöÇϸé <±×¸² 4>¿Í °°´Ù. ÀÌÁ¦ºÎÅÍ ÀÌ ±Û¿¡¼­´Â Áö¸éÀ» Àý¾àÇϱâ À§ÇØ °¡±ÞÀû ±ä ¸» ´ë½Å ª°í °£°áÇÑ ¸»À» ÀÚÁÖ »ç¿ëÇÒÅ×´Ï ¿ë¾î¿¡ Âø¿À¾ø±â ¹Ù¶õ´Ù. <±×¸² 4> "Æ÷ÀÎÅÍ ptrÀº ¹®ÀÚ¿­ÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å²´Ù."ÀÇ °³³äµµ --------------------------------------------------------------------- +---¼±µÎ¹øÁö Æ÷ÀÎÅÍ ptr | +--------+ ¼±µÎ¹øÁö¸¦ +-+-+----------------+----+ | o ---+------------> | I | 'm a Rambo III | \0 | +------2--+ °¡¸®Å²´Ù +---+----------------+----+ | | +----- ÀÌ "°¡¸®Å²´Ù"¶ó´Â ¸»Àº °³³äÀûÀÎ °ÍÀÌ´Ù. ½ÇÁ¦ ¹º°¡°¡ ¿¬°áµÇ¾î ÀÖ´Ù´Â ¶æÀº Àý´ë ¾Æ´Ï´Ù. ½ÇÁ¦ »óȲÀº <±×¸² 3>ÀÏ µû¸§ÀÌ°í ÀÌ ±×¸²Àº ½ÇÁ¦ »óȲÀ» Æ÷ÀÎÅÍ °³³äÀ» ½á¼­ º¸±â ÁÁ°Ô ±×¸° °Í »ÓÀÌ´Ù. --------------------------------------------------------------------- ÀÚ, ÀÌÁ¦´Ù½Ã º»·ÐÀ¸·2Î µ¹¾Æ°¡ÀÚ. Âü ¾Æ±î ºü¶ß·È´Âµ¥ 5ÇàÀÇ ¹®ÀÚ ¹è ¿­ chararray Á¤ÀÇ¿¡¼­ ¹è¿­Å©±â°¡ STRINGLEN + 1ÀÎ ÀÌÀ¯´Â, ¹®ÀÚ¿­ÀÇ ³¡ ÀÓÀ» Ç¥½ÃÇÏ´Â ³Î Á¾·á¹®ÀÚ(null terminator) '\0'À» ÀúÀåÇϱâ À§ÇØ, ÀúÀå ÇÒ ¹®ÀÚ¿­ÀÇ Àüü ±æÀÌ¿¡ Ãß°¡·Î 1¹ÙÀÌÆ®°¡ ´õ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. 8ÇàÀº È­¸é Àüü¸¦ Áö¿î´Ù. <±×¸² 5> Æ÷ÀÎÅÍ¿Í ¹®ÀÚ ¹è¿­ÀÇ ¸Þ¸ð¸® ±¸Á¶ --------------------------------------------------------------------- Æ÷ÀÎÅÍ ps +--------+ | | +--------+ 2 +-+--------- ÇöÀç ÅÖÅÖ ºñ¾îÀÖ´Ù. | (½ÇÁ¦·Î´Â ¾²·¹±â°ªÀÌ µé¾î ÀÖ´Ù) | ¹®ÀÚ ¹è¿­ chararray ÃÑ +---+---+---+---+---+---+-------+---+---+---+---+---+---+---+ 22¹ÙÀÌÆ®| | | | | | | o o o | | | | | | | | +---+---+---+---+---+---+-------+---+---+---+---+---+---+---+ ¹è¿­¿ä¼Ò [0] [1] [2] [3] [4] [15][16][17][18][19][20][21] | 2 | +----------------- ¹è¿­Å©±â 22¹ÙÀÌÆ® -------------------+ --------------------------------------------------------------------- À̻󿡼­ ¹®ÀÚ ¹è¿­ chararray¿Í ¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼ö ps¸¦ Á¤ÀÇÇß´Ù. ÀÌ·¸°Ô Çϸé C´Â ±×µéÀ» À§ÇØ ¸Þ¸ð¸®»óÀÇ Æ¯º°È÷ Á¤ÇØÁø À§Ä¡¿¡ ÀúÀå Àå¼Ò ¸¦ ¸¶·ÃÇÑ´Ù. ¸¶·ÃµÈ ¸Þ¸ð¸®ÀÇ ±¸Á¶´Â <±×¸² 5>¿¡ ³ªÅ¸³Â´Ù. ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #27 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ2-2: Æ÷ÀÎÅÍ ¿¬»êÀÇ Á¤º¹ 03/06 00:46 243 line 2.4 Æ÷ÀÎÅÍ¿Í ¹è¿­»ó¼ö 10: strcpy(chararray, "Welcome to my world !"); À§ÀÇ 10ÇàÀ» ÀÌÇØÇÏ·Á¸é ¾Æ·¡ÀÇ ¼¼ °¡Áö Àǹ®Á¡À» ¸ðµÎ ÇؼÒÇØ¾ß ÇÑ ´Ù. --------------------------------------------------------------------- ù°, strcpy¶ó´Â ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀÌ ¹«¾ùÀΰ¡? µÑ°, ¹è¿­¸í chararray ÀÚü°¡ ÀǹÌÇÏ´Â ¹Ù´Â ¹«¾ùÀΰ¡? ¼¼Â°, ¹®ÀÚ¿­ »ó¼ö°¡ ÇÔ¼öÀÇ ¸Å°³º¯¼ö(parameter)·Î ÁöÁ¤µÇ¾úÀ» ¶§ ¹«¾ùÀÌ ÇÔ¼ö·Î ³Ñ¾î°¡´Â°¡? --------------------------------------------------------------------2- û°³±¸¸® °°Áö¸¸ Àǹ®Á¡À» ¼¼¹ø°ºÎÅÍ ²¨²Ù·Î Ç®¾îº¸ÀÚ. ¹®ÀÚ¿­ »ó¼ö ´Â ¾îµòÁö´Â ¸ô¶óµµ ¾ðÁ¦³ª ¸Þ¸ð¸®ÀÇ ÇÑ ±ÍÅüÀ̸¦ Â÷ÁöÇÑ´Ù(ÀúÀåµÈ´Ù). ¹® ÀÚ¿­ »ó¼ö°¡ ÇÔ¼öÀÇ ¸Å°³º¯¼ö·Î ÁöÁ¤µÇ¸é ÀÌ·¸°Ô ¸Þ¸ð¸®ÀÇ ÇÑ ±ÍÅüÀ̸¦ Â÷ ÁöÇÑ ¹®ÀÚ¿­ »ó¼öÀÇ ¼±µÎ¹øÁö°¡ ÇÔ¼ö·Î ³Ñ¾î°£´Ù. ¸»À» ¹Ù²Ù¸é ¹®ÀÚ¿­ »ó ¼öÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ°¡ ÇÔ¼ö·Î Àü´ÞµÈ´Ù´Â ¶æÀÌ´Ù. Áï ¹®ÀÚ¿­ ÀÚü´Â ÀÖ´ø ±× ÀÚ¸®¿¡ ¾äÀüÇÏ°Ô µÎ°í ÇÔ¼ö¿¡°Ô´Â ¹®ÀÚ¿­ÀÌ ÀúÀåµÇ¾î ÀÖ´Â ±× ÀÚ¸®ÀÇ ¼±µÎ¹øÁö¸¸ Àü´ÞÇÏ´Â °ÍÀÌ´Ù. °è¼ÓÇؼ­ µÎ¹ø° Àǹ®Á2¡À» Ç®¾îº¸ÀÚ. ±× Àǹ®Á¡Àº °£´ÜÇÏ°Ô Ç®¸°´Ù. Áï C¿¡¼­ "¹è¿­¸í chararrayÀº ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å° ´Â ¹øÁö°ªÀÌ´Ù"¶ó°í ¿©±âÀÚ°í ¾à¼ÓÀÌ µÇ¾î ÀÖ´Ù. ±× ¹øÁö°ªÀ» À̸§ÇÏ¿© ¹è ¿­ »ó¼ö¶ó°í ÀÏÄ´´Ù. ¸»À» ¹Ù²Ù¸é ¹è¿­¸í chararray ÀÚü´Â ±× ¹®ÀÚ ¹è ¿­ÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å°´Â ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ »ó¼ö¶ó´Â ¶æÀÌ´Ù. ÀÌ·¸µí ¹è¿­¸í chararray ÀÚü´Â ¾îµð±îÁö³ª ¼öÄ¡ »ó¼ö 10, 20.23 µî °ú °°Àº °è¿­ÀÇ "»ó¼ö"À̹ǷÎ, º¯¼öó·³ Ưº°È÷ Á¤ÇØÁø ¸Þ¸ð¸®»ó À§Ä¡¿¡ ¹è¿­ »ó¼ö chararray°¡ ÀúÀåµÇ¾î ÀÖ´Â °2ÍÀÌ ¾Æ´ÔÀ» ÁÖÀÇÇϱ⠹ٶõ´Ù. µû¶ó ¼­ ±×¸²À¸·Î Ç¥ÇöÇϸé Æ÷ÀÎÅÍ º¯¼ö ps¿Í´Â Â÷ÀÌ°¡ ³­´Ù. charray°¡ ¸Þ¸ð¸® ÀÇ ¾î¶² °÷¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ÍÀÌ ¾Æ´ÔÀ» ÁÖ¸ñÇÑ´Ù. <±×¸² 6> "¹è¿­¸íÀº ±× ¹è¿­ÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ »ó¼öÀÌ´Ù" --------------------------------------------------------------------- chararray ------+ +-+-+-+-+-+-+-+- --+-+-+-+-+-+ +-+-+-+-+-+-+-+-- -+-+-+-+-+-+ chararray ¹®ÀÚ ¹è¿­ -------2-------------------------------------------------------------- ÀÌÁ¦ 10ÇàÀÇ À±°ûÀÌ ´ëüÀûÀ¸·Î ÀâÇû´Ù. Áï 10ÇàÀº strcpy¶ó´Â ÇÔ¼ö¿¡ ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö¿Í ¹®ÀÚ¿­ »ó¼ö "Welcome to my world !" ÀÇ ¼±µÎ¹øÁö¸¦ Àü´ÞÇÏ´Â °ÍÀÌ´Ù. ±×·³ strcpy°¡ ¹«¾ó ÇÏ´Â ÇÔ¼öÀÎÁö¸¸ ¾Ë ¸é ³¡³­´Ù. 2.5 strcpy ÇÔ¼öÀÇ µ¿ÀÛ ÇÔ¼ö¸í strcpy´Â "string copy"ÀÇ ¾àÀÚÀÌ´Ù. ÇÔ¼ö¸íÀ¸·Î Ç®ÀÌÇϸé str cpy´Â ¹®ÀÚ¿­À» º¹»çÇÏ´Â ÇÔ¼öÀÓÀÌ Æ²¸²¾ø´Ù. ÀÌ·¸µí ÆĽºÄ®ÀÇ ´ëÀÔ ¿¬»ê ÀÚ :=°¡ ÇàÇÏ´Â ¹®ÀÚ¿­ ´ëÀÔ(º¹»ç)À»2 C¿¡¼­´Â strcpy¶ó´Â ÇÔ¼ö°¡ ´ëÇàÇÏ´Â °ÍÀÌ´Ù. strcpy ÇÔ¼ö°¡ ½ÇÇàµÇ´Â °úÁ¤Àº ÀÌ·¸´Ù. ¸ÕÀú strcpy´Â µÎ °³ÀÇ ¸Å°³º¯¼ö¸¦ Àü´Þ¹Þ´Â´Ù. ±× ¸Å°³º¯¼ö´Â µÑ ´Ù Æ÷ÀÎÅÍ(¹øÁö°ª)ÀÌ´Ù. ù¹ø° ¹øÁö¸¦ destinÀ̶óÇÏ°í µÎ¹ø° ¹øÁö¸¦ source ¶ó ÇÏÀÚ. strcpy°¡ ÇÏ´Â ÀÏÀº ¹Ù·Î source ¹øÁöºÎÅÍ ³Î Á¾·á¹®ÀÚ±îÁöÀÇ ¸ð µç ¹®ÀÚµéÀ» destin ¹øÁö¿¡ Â÷·ÊÂ÷·Ê º¹»çÇÏ´Â °ÍÀÌ´Ù. ±×¸²À¸·Î strcpy ÇÔ¼öÀÇ µ¿ÀÛÀ» ¾Ë¾Æº¸ÀÚ. <±×¸² 7> strcpy ÇÔ¼ö¿¡ ¸Å°³º¯¼ö Àü´Þ ¹æ¹ý -------------------------------------------------------2-------------- ¼±µÎ¹øÁö¸¸ Àü´Þ +-------------+ ¹®ÀÚ ¹è¿­ chararray +----------+ | +-+-+-+-+-+-+-+- --+-+-+-+-+-+ | strcpy | | +-+-+-+-+-+-+-+-- -+-+-+-+-+-+ +----------+ | | destin --+---+ +---+----------------------+----+ +----------+ | W | elcome to my world ! | \0 | | source --+---+ +---+----------------------+----+ +----------+ | | ¹®ÀÚ¿­ »ó¼ö +------2--------+ ¼±µÎ¹øÁö¸¸ Àü´Þ --------------------------------------------------------------------- <±×¸² 8> strcpy´Â source ¹øÁöÀÇ ¹®ÀÚ¿­À» destin ¹øÁö·Î º¹»çÇÑ´Ù --------------------------------------------------------------------- destin --+ | ¹®Àڹ迭 chararray | +-+-+---+---+---+---+-----------+---+---+---+---+---+---+---+ | W | e | l | c | o | o o o | o | r | l | d | | ! | \0| +---+---+---+---+-2--+-----------+---+---+---+---+---+---+---+ strcpy°¡ | | | | | | | | | | | | º¹»çÇÑ´Ù | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-----------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | W | e | l | c | o | o o o | o | r | l | d | | ! | \0| +-+-+---+---+---+---+-----------+---+---+---+---+---+---+---+ | 2 | | ¹®ÀÚ¿­ »ó¼ö | source ---+ | ¿©±â¼­ºÎÅÍ º¹»ç¸¦ ½ÃÀÛÇÑ´Ù ³Î Á¾·á¹®ÀÚ±îÁö º¹»çÇÑ´Ù --+ --------------------------------------------------------------------- 10ÇàÀ» ºÐ¼®Çغ» ¼Ò°¨ÀÌ ¾î¶²°¡? Áö±Ý±îÁö ¼³¸íÀº Â÷°í ³ÑÄ¡µµ·Ï ¸¹ÀÌ ÇßÀ¸¹Ç·Î ´õ ÀÌ»óÀÇ À̾߱â´Â Àâ´ãÀÌ µÉ °Í °°¾Æ ±×¸¸µÎ±â·Î ÇÑ´Ù. ±×·³ 1 1ÇàÀ¸·Î ³Ñ¾î°¡º¸ÀÚ. 11: ps = chararra2y; 11ÇàÀº ¹è¿­ »ó¼ö chararray¸¦ Æ÷ÀÎÅÍ(¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼ö) ps¿¡ ´ëÀÔ ÇÑ´Ù. ¹è¿­ »ó¼ö chararray´Â ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö°ªÀ» °¡Áö¹Ç ·Î Æ÷ÀÎÅÍ º¯¼ö ps¿¡´Â ¹®ÀÚ ¹è¿­ chararrayÀÇ ¹øÁö°ªÀÌ ÀúÀåµÈ´Ù. ¸»À» ¹Ù²Ù¸é 11ÇàÀÇ ´ëÀÔ½Ä ÀÌÈÄ Æ÷ÀÎÅÍ ps´Â ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö ¸¦ °¡¸®Å°°Ô µÈ´Ù´Â ¶æÀÌ´Ù. ¿©±â±îÁöÀÇ »óȲÀ» ±×¸²À¸·Î Ç¥½ÃÇÏ¸é ´ÙÀ½°ú °°´Ù. <±×¸² 9>´Â °³³ä µµÀÌ°í <±×¸² 10>Àº ½ÇÁ¦ »óȲÀÌ´Ù. <±×¸² 9> °³³äµµ ---------------------------------------------------2------------------ Æ÷ÀÎÅÍ ps <--- ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å²´Ù +-------+ | o --+-+ +-------+ | | ¹®Àڹ迭 chararray +-+-+---+---+---+---+-----------+---+---+---+---+---+---+---+ | W | e | l | c | o | o o o | o | r | l | d | | ! | \0| +---+---+---+---+---+-----------+---+---+---+---+---+---+---+ ¹è¿­¿ä¼Ò [0] [1] [2] [3] [4] [15][16][17][18][19][20][21] ------------------------------------------------2--------------------- <±×¸² 10> ½ÇÁ¦ »óȲ --------------------------------------------------------------------- Æ÷ÀÎÅÍ ps <---- ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö¸¦ ÀúÀåÇÏ°í ÀÖ´Ù. +--------+ | ¹øÁö°ª | +--------+ ¹®Àڹ迭 chararray +---+---+---+---+---+-----------+---+---+---+---+---+---+---+ | W | e | l | c | o | o o o | o | r | l | d | | ! | \0| +---+---+---+---+---+-----------+---+---+---+---+---+---+-2--+ ¹è¿­¿ä¼Ò [0] [1] [2] [3] [4] [15][16][17][18][19][20][21] --------------------------------------------------------------------- 2.6 ¹®ÀÚ¿­ÀÇ Ãâ·Â ¸Ó¸®°¡ Âî²öÂî²öÇÏ´õ¶óµµ Âزû¸¸ ´õ °¡¸é ½¯ ¼ö ÀÖÀ¸´Ï±î ¿©±â¼­ ¼ûµ¹ ¸± »ý°¢ ¸»°í ÁÙ±âÂ÷°Ô ÀüÁøÇÑ´Ù. ³«¿ÀÇÏÁö ¾Ê°í ÀüÁøÇÏ´Â °Í¸¸ÀÌ »ì±æÀÌ ´Ù. °è¼ÓÇؼ­, 13: printf("%s\n", chararray); 14: printf("%s\n", ps); 13ÇàÀº ¹®ÀÚ ¹è¿­ chararrayÀ» ¹®ÀÚ¿­·Î °£ÁÖÇÏ°í È­¸é¿¡ Ãâ·ÂÇÏ´Â °Í ÀÌ´Ù.%s ¼­½ÄÀº Àμö(½Ç¸Å°³2º¯¼ö)¸¦ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ·Î ÀνÄÇÏ°í ±× Æ÷ÀÎÅÍ °¡ °¡¸®Å°´Â ¹øÁöºÎÅÍ ³Î Á¾·á¹®ÀÚ »çÀÌ¿¡ ÀÖ´Â ¹®ÀÚµéÀ» Ãâ·ÂÇ϶ó´Â ÀÇ¹Ì ¸¦ °¡Áø´Ù. ¹è¿­¸í chararray ÀÚü´Â ±× ¹è¿­ÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å°´Â Æ÷ÀÎ ÅͶó°í ´©Â÷ À̾߱âÇß´Ù. µû¶ó¼­ 13ÇàÀº ¹®ÀÚ ¹è¿­ chararrayÀÇ ³»¿ëÀ» È­ ¸é¿¡ Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù. 14ÇàÀº 13Çà°ú ¸¶Âù°¡ÁöÀÌ´Ù. ps°¡ ¹®ÀÚ¿­ Æ÷ÀÎÅÍ º¯¼öÀε¥ Æ÷ÀÎÅÍ ps ´Â ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å°¹Ç·Î 14ÇàÀº °á±¹ ¹®ÀÚ ¹è¿­ chararray¸¦ È­¸é¿¡ Ãâ·ÂÇÏ´Â ¼ÀÀÌ µÇ¾î 14ÇàÀº 13Çà°ú ¶È°°Àº ½ÇÇà °á°ú ¸¦ 2°¡Á®¿Â´Ù. 16: printf("String length of ps: %d\n", strlen(ps)); 17: printf("String length of chararray: %d\n", strlen(chararray)); ±× ´ÙÀ½, 16ÇàÀº Æ÷ÀÎÅÍ°¡ ps°¡ °¡¸®Å°´Â ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù. strlen ÇÔ¼ö¿¡ ¸Å°³º¯¼ö·Î¼­ Æ÷ÀÎÅ͸¦ Àü´ÞÇϸé strlenÀº ±× Æ÷ÀÎ ÅÍ°¡ °¡¸®Å°´Â ¹øÁöºÎÅÍ ³Î Á¾·á¹®ÀÚ Á÷Àü±îÁöÀÇ ¹®ÀÚÀÇ °¹¼ö¸¦ ¼¼¾î¼­ Á¤ ¼ö°ªÀ¸·Î ¸®ÅÏÇÑ´Ù. ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ µÇµ¹·Á ÁÖ´Â ÆĽºÄ®ÀÇ Length ÇÔ¼ö¿Í ³í¸®ÀûÀ¸·Î µ¿µîÇÑ ÀÏÀ» ÇÑ´Ù. ¹®ÀÚ¿­ "Welcome to my world !"´Â 2¸ðµÎ 22¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸®¸¦ Â÷ÁöÇÑ ´Ù. strlen ÇÔ¼ö´Â ±× Áß¿¡¼­ ³Î Á¾·á¹®ÀÚ¸¦ Á¦¿ÜÇÑ 21À» ¸®ÅÏÇÏ´Â °ÍÀÌ ´Ù. 17ÇàÀº ¹®ÀÚ ¹è¿­ chararray¸¦ ¹®ÀÚ¿­·Î º¸°í ¿ª½Ã 16Çà°ú ¸¶Âù°¡Áö·Î 22 - 1 == 21À» Ãâ·ÂÇÑ´Ù. Æ÷ÀÎÅÍÀÇ ÀÔÀå¿¡¼­ º¸¸é ¹®ÀÚ¿­°ú ¹®ÀÚ ¹è¿­À» ÀüÇô ±¸ºÐÇÒ ¼ö ¾øÀ½À» »ó±âÇϱ⠹ٶõ´Ù. Áï ¹®ÀÚ¿­°ú ¹®ÀÚ ¹è¿­Àº Æ÷ÀÎÅÍ ¿¡ ÀÇÇØ µ¿µîÇÏ°Ô ´ë¿ì¹Þ´Â´Ù. ¹®ÀÚ ¹è¿­À» ¹®ÀÚ¿­·Î °£ÁÖÇÏ¸é ¹®ÀÚ ¹è¿­ ÀÌ °ð ¹®ÀÚ¿­ÀÌ µÇ´Â °ÍÀÌ´Ù. 2.7 Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿­¿ä¼Ò¸¦ ÂüÁ¶ÇÏ´Â ¹æ¹ý 18: printf("2ps[0]: '%c'\n", ps[0]); 19: printf("ps[12] '%c', chararray[12] '%c'\n", ps[12], chararray[12]); 20: printf("End of ps: %d\n", ps[strlen(ps)]); 18ÇàÀ» º¸ÀÚ. ¿ì¼± chararray[0]À̶õ °ÍÀÌ ¹«¾ùÀ» ³ªÅ¸³»´ÂÁö Àß ¾Ë°í ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù. ±×·¯¸é ÀϹÝÀûÀ¸·Î, ps[n] À̶õ °ÍÀº ¹«¾ùÀ» ÀǹÌÇÒ±î? ÀÌ ±Û µÞºÎºÐ¿¡¼­ ¿øÄ¢ÀûÀ¸·Î ¼³¸íÇÏ°ÚÁö¸¸ p s[n]Àº ¹®ÀÚ¿­ Æ÷ÀÎÅÍ ps°¡ °¡¸®Å°´Â ¹øÁöºÎÅÍ n¹ø° ¹®ÀÚ¿­¿ä¼Ò¸¦ ³ªÅ¸³½ ´Ù(ù¿ä¼Ò°¡ Á¦0¹ø°). ¹®ÀÚ ¹è¿­ÀÇ »ç¿ë°ú ¸Å¿ì Èí»çÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ½Ç Á¦·Î 19ÇàÀÇ 2ps[12]¿Í ´Â chararray[12]´Â ¼­·Î µ¿ÀÏÇÑ ¹®ÀÚ 'y'¸¦ ³ªÅ¸³½ ´Ù. ¾î·µç ps[0]´Â (Æ÷ÀÎÅÍ ps°¡ °¡¸®Å°´Â ¹øÁö + 0), Áï ¹®ÀÚ¿­ "Welcom e to my world !"ÀÇ ¼±µÎ¹øÁö¿¡ ÀÖ´Â ¹®ÀÚ¿­¿ä¼Ò¸¦ ³ªÅ¸³½´Ù. ±× À§Ä¡¿¡´Â º¸´Ù½ÃÇÇ 'W' ¹®ÀÚ°¡ ÀÖ´Ù. ¶ÇÇÑ chararray[0]¿¡ ´Ù¸¥ ¹®ÀÚ¸¦ ´ëÀÔÇÒ ¼ö ÀÖµíÀÌ ps[0]¿¡µµ ´Ù¸¥ ¹®ÀÚ¸¦ ´ëÀÔÇÒ ¼ö ÀÖ´Ù. ¸¶Áö¸·À¸·Î 20ÇàÀº ¹«¾ùÀ» Ãâ·ÂÇ϶ó´Â ¹®ÀåÀϱî? ÇÔ¼ö strlen(ps)ÀÇ °á°ú´Â 21ÀÌ´Ù. ±×·¯¹Ç·Î ps[strlen(ps)]´Â ps[21]°ú µ¿ÀÏÇÏ´Ù. Áï (Æ÷ÀÎ ÅÍ ps°¡ °¡¸®Å°´Â ¹øÁö + 21)ÀÇ 2¹øÁö¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¹®ÀÚ¿­¿ä¼Ò¸¦ ³ªÅ¸ ³½´Ù. ±× À§Ä¡¿¡ ¹«¾ùÀÌ Àִ°¡? <±×¸² 11>À» º¸¸é ³Î Á¾·á¹®ÀÚ '\0'°¡ Àú ÀåµÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. °á±¹ printf ÇÔ¼ö¿¡ ÀÇÇØ È­¸é¿¡´Â 0ÀÌ Ãâ·ÂµÈ ´Ù. <±×¸² 11> ¹è¿­ÀÇ ³¡¿¡ '\0'°¡ ÀúÀåµÇ¾î ÀÖ´Ù. --------------------------------------------------------------------- Æ÷ÀÎÅÍ ps <--- ¹®ÀÚ ¹è¿­ chararrayÀÇ ¼±µÎ¹øÁö¸¦ °¡¸®Å²´Ù +-------+ | o | +---+---+ +--------------------- ps[0] | | +- ps[12] | | 2 | ps[strlen(ps)] ------------------+ | | | | | +-+-+-------+---+---+-+-+---+---+---+---+---+---+---+---+-+-+ +---+ W | o o o | | m | y | | w | o | r | l | d | | ! | \0| +---+-------+---+---+---+---+---+---+---+---+---+---+---+---+ ¹è¿­¿ä¼Ò [0] [10][11][12][13][14][15][16][17][18][19][20][21] | | | +- chararray[12] | 2 +--------------------- chararray[0] --------------------------------------------------------------------- ÀÌ°ÍÀ¸·Î¼­ ¾Ë°í º¸¸é º° °Íµµ ¾Æ´ÏÁö¸¸ ¸ð¸£´Â »ç¶÷Àº Á¾ÀâÀ» ¼ö ¾ø ´Â <¿¹Á¦ 1> °íÁö¸¦ ÇâÇÏ¿© ¼û°¡»Ú°Ô ¿Ã¶ó°¬´ø ±æ°í ±ä µîÁ¤ÀÌ ¸¶Ä§³» Á¾ °áµÇ¾ú´Ù. ¿©±â¼­ ³»¿ëÀÌ ÀϴܶôµÇ¾úÀ¸´Ï ¿À´ÃÀº ÀÌÂë¿¡¼­ ½¬°í ´ÙÀ½ ³»¿ë Àº ³»ÀϺÎÅÍ Àоîµé¾î°¡±â ¹Ù¶õ´Ù. ±¦È÷ ¿å½É³»¼­ ´õ Àоî´Ù°£ ¹èÅ»³¯Å×´Ï Áö±Ý Ã¥À» µ¤´Â°Ô Á¤½Å °Ç°­¿¡ ÀÌ·Î¿ï °ÍÀÌ´Ù. ÀÚ, ±×·³ ³»ÀÏ º¾½Ã´Ù. See youtomorrow! ´ÙÀ½ ±Û·Î °è¼2Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #28 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ2-3: Æ÷ÀÎÅÍ ¿¬»êÀÇ Á¤º¹ 03/06 00:48 348 line --------------------------------------------------------------------- 3 ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ¿Í Æ÷ÀÎÅÍ ¿¬»ê --------------------------------------------------------------------- Áö±ÝºÎÅÍ À̹ø ¿¬ÀçÀÇ ÇÏÀ϶óÀÌÆ®ÀÎ Æ÷ÀÎÅÍ ¿¬»ê¿¡ ´ëÇØ ÁýÁßÀûÀ¸·Î Ž±¸ÇØ º¸µµ·Ï ÇÏÀÚ. »ç½Ç »ê¼úÇü º¯¼ö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ¿¡¸¸ °ü½ÉÀÌ ÀÖ ´Ù¸é ´õ ÀÌ»óÀÇ Æ÷ÀÎÅÍ ¿¬»ê¿¡ ´ëÇØ ÁÖ¸ñÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ±×·¯³ª ¹è¿­À» ´Ù·ç´Â Æ÷ÀÎÅÍ, Áï ¹è¿­ Æ÷ÀÎÅͶó¸é *³ª & ¿¬»êÀÚ¸¸À¸·Î´Â źÎÁ·ÀÌ´Ù. ±× ·³ ±×¿Ü¿¡ ¾î¶°ÇÑ Æ÷ÀÎÅÍ ¿¬»êÀÌ °¡´ÉÇÑÁö ÇϳªÇϳª ÁÖÀDZí°Ô »ìÆ캸ÀÚ. 3.1 px + iÀÇ ÀÇ¹Ì int x[5], *px; px = x; À§¿Í °°ÀÌ px°¡ intÇü Æ÷ÀÎÅÍÀÌ°í px°¡ intÇü ¹è¿­ÀÇ Ã¹ ¹è¿­¿ä¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù°í ÇÒ ¶§ px¿¡ Á¤¼ö ¼öÄ¡ 1À» ´õÇÑ ¾Æ·¡ÀÇ ¼ö½ÄÀº ¹«¾ùÀ» ÀÇ ¹ÌÇÒ±î? (TÇü Æ÷ÀÎÅͶó ÇÔÀº ´ë»óü°¡ TÇüÀÎ Æ÷ÀÎÅ͸¦ ¶æÇÑ´Ù) +--------+ | px + 1 | +--------+ À§ÀÇ ¼ö½ÄÀº +---------------------------------------------------------+ | px°¡ °¡¸®Å°´Â ¹è¿­¿ä¼Ò ¹Ù·Î ´ÙÀ½ÀÇ ¹è¿­¿ä¼Ò¸¦ °¡¸®Å²´Ù. | +---------------------------------------------------------+ px ¹Ù·Î ´ÙÀ½ ¹ÙÀÌÆ®ÀÇ ¹øÁö¸¦ °¡¸®Å°´Â °ÍÀÌ ¾Æ´Ô¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. px + 1ÀÌ px ¹Ù·Î ´ÙÀ½ ¹ÙÀÌÆ®ÀÇ ¹øÁö¸¦ °¡¸®Å°°Ô µÇ´Â °æ¿ì´Â px°¡ ¹®ÀÚ Æ÷ÀÎÅÍ(character pointer), Áï ¹®ÀÚ ¹è¿­ Æ÷ÀÎÅͳª ¹®ÀÚ¿­ Æ÷ÀÎÅÍÀÏ ¶§ »ÓÀÌ´Ù. ¸ðµç intÇü µ¥ÀÌÅÍ´Â 2¹ÙÀÌÆ® Å©±â¸¦ °¡Áø´Ù. px°¡ intÇü Æ÷ÀÎÅÍ, Á¤ È®È÷´Â Á¤¼ö ¹è¿­ Æ÷ÀÎÅÍÀ̹ǷΠpx + 1Àº px + (2¹ÙÀÌÆ®)ÀÇ ¹øÁö¸¦ °¡¸®Å° °Ô µÈ´Ù. px + 1ÀÌ px + (1¹ÙÀÌÆ®)ÀÇ ¹øÁö¸¦ °¡¸®Å°´Â °ÍÀÌ ¾Æ´ÔÀ» È®½ÇÇÏ °Ô ±â¾ïÇØ¾ß ÇÒ °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î Æ÷ÀÎÅÍ¿¡ Á¤¼ö ¼öÄ¡¸¦ ´õÇÑ ¼ö½ÄÀÇ Àǹ̴ ¾Æ·¡¿Í °°´Ù. À̶§ i´Â Á¤¼ö ¼öÄ¡¸¦ ³ªÅ¸³½´Ù. +-------------------------------------------------------------+ | px + i°¡ °¡¸®Å°´Â ¹øÁö´Â px + (i¹ÙÀÌÆ®)°¡ ¾Æ´Ï¶ó | | px + (i * sizeof(*px) ¹ÙÀÌÆ®)ÀÌ´Ù. | +-------------------------------------------------------------+ px + i´Â px°¡ ¹«½¼Çü Æ÷ÀÎÅÍÀΰ¡¿¡ ÀüÇô »ó°ü¾øÀÌ px°¡ °¡¸®Å°´Â ¹è ¿­¿ä¼Ò ¹Ù·Î ´ÙÀ½ÀÇ ¹è¿­¿ä¼Ò¸¦ °¡¸®Å´À» ÁÖ¸ñÇØ¾ß ÇÑ´Ù. ÀÌ ¸»À» ¹Ù²ã¼­ ¸»Çϸé px°¡ ¹«½¼Çü Æ÷ÀÎÅÍÀΰ¡¿¡ µû¶ó px + iÀÇ ¹øÁö°¡ ´Þ¶óÁø´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î px°¡ doubleÇü Æ÷ÀÎÅÍÀ̸é px + 1Àº px + (8¹ÙÀÌÆ®)ÀÇ ¹ø Áö¸¦ °¡¸®Å°°Ô µÈ´Ù. <±×¸² 12>¸¦ Âü°íÇϱ⠹ٶõ´Ù. Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§¿¡´Â ±× Æ÷ÀÎÅÍ º¯¼ö°¡ °¡¸®Å°´Â ´ë»óÀÇ µ¥ÀÌ ÅÍÇüÀ» ¹Ýµå½Ã ¹àÇô ÁÖ¾î¾ß ÇÏ´Â Á÷Á¢ÀûÀÎ ÀÌÀ¯°¡ ¹Ù·Î px + iÀÇ ¹øÁö¸¦ °è»êÇϱâ À§ÇØ sizeof(*px)ÀÇ °ªÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. <±×¸² 12> px + 1ÀÇ ÀÇ¹Ì --------------------------------------------------------------------- * px°¡ intÇü Æ÷ÀÎÅÍÀÏ ¶§ px - 1 px px + 1 px + 2 px + 3 | | | | | -+-+-----+-+-----+-+-----+-+-----+-+-----+- | | | | | | -+---+---+---+---+---+---+---+---+---+---+- »ó´ë ¹øÁö -2 -1 0 1 2 3 4 5 6 7 * pxx°¡ doubleÇü Æ÷ÀÎÅÍÀÏ ¶§ px px + 1 px+ 2 | | | --------++--------------++--------------++-- | | | --+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- »ó´ë ¹øÁö -4-3-2-10 1 2 3 4 5 6 7 8 9 10111213141516 --------------------------------------------------------------------- ¿©±â±îÁö ¼³¸íÇÑ »çÇ×À» °í·ÁÇÏ¸é ¾Æ·¡¿Í °°Àº °á·ÐÀ» À¯µµÇÒ ¼ö ÀÖ ´Ù. --------------------------------------------------------------------- px°¡ ¹è¿­ÀÇ Ã¹ ¿ä¼Ò¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ px + i´Â ¹è¿­ÀÇ i¹ø° ¿ä¼Ò¸¦ °¡¸®Å²´Ù. --------------------------------------------------------------------- px°¡ ¹è¿­ÀÇ ¾î¶² ¿ä¼Ò¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ px - i´Â ±× ¿ä¼ÒÀÇ i¹ø° ¾Õ ÀÇ ¿ä¼Ò¸¦ °¡¸®Å°°Ô µÈ´Ù. --------------------------------------------------------------------- px°¡ ¹è¿­ÀÇ ¾î¶² ¿ä¼Ò¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ px + i´Â ±× ¿ä¼ÒÀÇ i¹ø° µÚ ÀÇ ¿ä¼Ò¸¦ °¡¸®Å°°Ô µÈ´Ù. --------------------------------------------------------------------- ÀÌ ¸»µéÀº Æ÷ÀÎÅÍÀÇ °³³äÀ» È¥µ¿¾øÀÌ ¸íÈ®ÇÏ°Ô ÀÌÇØÇÏ´Â µ¥ »ó´çÈ÷ Áß ¿äÇÑ ¾î±Í°¡ µÇ¹Ç·Î ³ë·§°¡¶ô Èï¾óÈï¾ó ¿Ü¿ìµíÀÌ ¸ö¿¡ ¹èµµ·Ï ¹Ýº¹Çؼ­ ¾Ï ±âÇØ¾ß ÇÒ °ÍÀÌ´Ù. 3.2 *(px + i)ÀÇ ÀÇ¹Ì int x[5], *px; px = x; À§¿Í °°À» ¶§ px´Â Á¤¼ö ¹è¿­ xÀÇ Ã¹¿ä¼Ò¸¦ °¡¸®Å°°í ÀÖÀ¸¹Ç·Î ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ px + i´Â ¹è¿­ xÀÇ i¹ø° ¿ä¼Ò¸¦ °¡¸®Å°°Ô µÈ´Ù. µû¶ó¼­ *(px + i)´Â ¹è¿­ xÀÇ i¹ø° ¿ä¼ÒÀÇ ³»¿ëÀ» ³ªÅ¸³½´Ù. °á·ÐÀûÀ¸·Î +---------------------------------------------------+ | x[i]¿Í *(px + i)´Â ¿ÏÀüÈ÷ µ¿µî(equivalent)ÇÑ ¼ö½Ä | +---------------------------------------------------+ À̶ó ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ µÎ ¼ö½Äµµ ¿ÏÀüÈ÷ µ¿µîÇÑ(equivalent, not identical!) ¼ö½ÄÀÌ ´Ù. ------------------------------------------------------------------ px = x; <--- ¹è¿­»ó¼ö x´Â ù¹ø° ¹è¿­¿ä¼ÒÀÇ ¹øÁö¸¦ ³ªÅ¸³½´Ù. px = &x[0]; <--- &x[0]´Â x[0]ÀÇ ¹øÁö¸¦ ±¸ÇÑ´Ù. ------------------------------------------------------------------ <±×¸² 13> *(px + i)¿Íx[i]´Â µ¿µî(equivalent)ÇÑ ¼ö½ÄÀÌ´Ù. --------------------------------------------------------------------- ¹è¿­»ó¼ö x | ¹è¿­¿ä¼Ò x[0] x[1] x[2] x[3] x[4] --+---------+---------+---------+---------+---------+--- ¹è¿­ x | | | | | | --+---------+---------+---------+---------+---------+--- *px *(px + 1) *(px + 2) *(px + 3) *(px + 4) | | | | | Æ÷ÀÎÅÍ px | | | | | +-------+ | px | px + 1 | px + 2 | px + 3 | px + 4 | o --+---+---------+---------+---------+---------+ +-------+ --------------------------------------------------------------------- 3.3 px[i]ÀÇ Á¤Ã¼ C¿¡¼­ ¹è¿­ÀÇ Ã·ÀÚ¸¦ ³ªÅ¸³»´Â [ ]´Â ( ) µî°ú °°Àº Á¾·ùÀÇ ±âº» ¿¬»ê ÀÚ(primary operator)·Î ºÐ·ùµÈ´Ù. [ ]°¡ ¿¬»êÀÚÀÎ ÀÌÀ¯´Â ¾Æ·¡¿Í°°ÀÌ [ ]ÀÌ ¿¬»êÀڷμ­ Á¤ÀǵǾî Àֱ⠶§¹®ÀÌ´Ù. ÆĽºÄ®¿¡¼­´Â [ ]°¡ ¿¬»êÀÚ°¡ ¾Æ ´Ñ ÀÏÁ¾ÀÇ ±âÈ£¿¡ ºÒ°úÇÔÀ» »ó±âÇϱ⠹ٶõ´Ù. +--------------------------------------------------------+ | px[i]´Â *(px + i)¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÑ(identical) ¼ö½ÄÀÌ´Ù. | +--------------------------------------------------------+ ¹®¹ýÀûÀ¸·Î Ç¥ÇöÇÏ¸é ¾Æ·¡¿Í °°´Ù. ¾Æ¹«·¡µµ ±ÛÀÚ ÇÑ ÀÚ ÇÑ ÀÚ¿¡ ½Å°æ ½á¼­ ´Þ´Þ ¿Ü¿ì´Â °ÍÀÌ ÁÁÀ» ¼º ½Í´Ù. µ¹¾Æ¾ÉÀ¸¸é Àؾî¸ÔÀ» Å״ϱî ÇÏ´Â ¸»ÀÌ´Ù. ---- ¹è¿­ ÂüÁ¶(array reference)¿¡ °üÇÑ Á¤ÀÇ ------------------------- E1[E2]´Â Á¤ÀÇ¿¡ ÀÇÇØ *((E1) + (E2))¿Í ¿ÏÀüÈ÷ µ¿ÀÏ(identical)ÇÏ´Ù. º¸´Ù Á¤È®È÷ Ç¥ÇöÇϸé (E1)[E2]¿Í *((E1) + (E2))ÀÓ. °ýÈ£´Â ¿¬»ê¼øÀ§ ¿¡ µû¶ó »ý·« °¡´ÉÇÔ. ´Ü, E1°ú E2 Áß¿¡¼­ µÑ Áß¿¡ Çϳª´Â ¹Ýµå½Ã Æ÷ÀÎÅÍ ¼ö½ÄÀ̾î¾ß ÇÏ¸ç ³ª¸ÓÁö Çϳª´Â ¹Ýµå½Ã Á¤¼ö ¼ö½ÄÀ̾î¾ß ÇÑ´Ù. µÑ ´Ù Æ÷ÀÎÅÍ ¼ö½ÄÀ̰ųª µÑ ´Ù Á¤¼ö ¼ö½ÄÀÏ ¼ö´Â ¾ø´Ù. --------------------------------------------------------------------- ºÎºÐ¹è¿­(subarray)ÀÇ°³³ä¿¡ ´ëÇؼ­ ¾ÆÁ÷¼³¸íÇÏÁö´Â ¾Ê¾ÒÁö¸¸ ¿¹¸¦ µé¾î¼­ »ïÂ÷¿ø ¹è¿­ÀÇ °æ¿ì, --------------------------------------------------------------------- x[i][j][k] *(x[i][j] + k) *(*(x[i] + j) + k) *(*(*(x + i) + j) + k) (*(x + i))[j][k] (*(*(x + i) + j))[k] <----- Àΰ£ÀûÀΠǥÇö ¹æ½Ä ÄÄÇ»ÅÍÀûÀΠǥÇö ¹æ½Ä --------> --------------------------------------------------------------------- À§ÀÇ ¼ö½Ä 6°³´Â ¼­·Î ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ºñ½ÁÇϰųª(similar) µ¿µîÇÑ (equivalent, ¶È°°Àº °á°ú¸¦ °¡Áö´Â) °ÍÀÌ ¾Æ´Ï¶ó ¿ÏÀüÈ÷ µ¿ÀÏÇÑ(identica l) °ÍÀÌ´Ù. ÀÌ·¸°Ô º¸¸é px[i]¶ó´Â °ÍÀº *(px + i)¸¦ º¸´Ù °£°áÇÏ°í º¸´Ù Àΰ£Àû À¸·Î Ç¥ÇöÇÑ ¼ö½Ä¿¡ Áö³ªÁö ¾ÊÀ½À» ¾Ë ¼ö ÀÖ´Ù. ½ÇÁ¦·Î ÄÄÆÄÀÏ·¯´Â px[i] ¸¦ *(px + i) ÇüÅÂÀÇ ±â°è¾î ÄÚµå·Î ÄÄÆÄÀÏÇÑ´Ù. ¸¶Âù°¡Áö·Î x[i]¿Í *(x + i)µµ ¿ÏÀüÈ÷ µ¿ÀÏ(identical)ÇÑ ¼ö½ÄÀÌ´Ù. Âü°í·Î px[i]´Â Æ÷ÀÎÅÍ º¯¼ö¿¡ ÀÇÇÑ ¹è¿­ ÂüÁ¶ÀÌ°í x[i]´Â Æ÷ÀÎÅÍ »ó ¼ö(¹è¿­ »ó¼ö)¿¡ ÀÇÇÑ ¹è¿­ ÂüÁ¶À̹ǷÎ, px[i]¿Í x[i]°¡ ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ¼ö ½ÄÀ̶ó°í ¸»ÇÒ ¼ö´Â ¾ø´Ù. ±×·¯³ª µÎ ¼ö½ÄÀº ¶È°°Àº ¹è¿­¿ä¼Ò¸¦ ÂüÁ¶ÇÏ¿© ¶È°°Àº °á°ú°ªÀ» °¡Áö°Ô µÇ¹Ç·Î ¼­·Î µ¿µî(equivalent)ÇÑ ¼ö½ÄÀ̶ó°í ÇÑ ´Ù. "µ¿ÀÏÇÑ ¼ö½Ä"°ú "µ¿µîÇÑ ¼ö½Ä"À̶ó´Â ¿ë¾î¿¡ È¥µ¿ÀÌ ¾ø±â ¹Ù¶õ´Ù. µ¿ ÀÏÇÑ ¼ö½ÄÀº ¶È°°Àº ±â°è¾î Äڵ带 »ý¼ºÇس»Áö¸¸ µ¿µîÇÑ ¼ö½ÄÀº °á°ú°ªÀÌ ¾ß °°Áö¸¸ »ý¼ºµÈ ±â°è¾î ÄÚµå´Â ¼­·Î ´Ù¸£´Ù. ±×·¯¸é ¿ÏÀüÈ÷ µ¿ÀÏÇÑ µÎ ¼ö½Ä *(px + i)¿Í px[i] Áß¿¡¼­ ¾î´À °ÍÀ» ¾²´Â °ÍÀÌ ÁÁÀº°¡¿¡ Àǹ®À» °¡Áú ¼ö ÀÖ´Ù. ÀÌ ¼±ÅÃÀº ÀüÀûÀ¸·Î ÇÁ·Î±×·¡¸Ó ÀÇ ±âÈ£¿¡ ´Þ·Á ÀÖ´Ù. ´Ù¸¸ Æ÷ÀÎÅÍ, Áï ¹øÁö¶ó´Â °üÁ¡ÀÌ Áß¿ä½ÃµÈ´Ù¸é *(p x + i)¸¦ »ç¿ëÇÏ°í ¹è¿­À̶ó´Â °üÁ¡ÀÌ Áß¿ä½ÃµÈ´Ù¸é px[i]¸¦ »ç¿ëÇÏ¸é µÉ °ÍÀÌ´Ù. ±×·±µ¥ ¾Æ·¡ÀÇ µÎ ¼ö½ÄÀº ¿¬»ê¼øÀ§·Î ÀÎÇØ ¼­·Î ¿ÏÀüÈ÷ Ʋ¸®´Ù. +----------------------------------+ | *px + 1´Â *(px + 1)°ú °°Áö ¾Ê´Ù. | +----------------------------------+ *px + 1Àº *px(Áï x[0])¿¡ 1À» ´õÇÑ °ªÀÌ µÈ´Ù. ±×·³ <¿¹Á¦ 2>¸¦ ÅëÇØ Áö±Ý±îÁö ¼³¸íÇÑ ¸ðµç ³»¿ëÀ» ½ÇÁ¦ ´«À¸·Î È®ÀÎÇØ º¸ÀÚ. <¿¹Á¦ 2> ÀÏÂ÷¿ø ¹è¿­°ú Æ÷ÀÎÅÍ¿ÍÀÇ °ü°è --------------------------------------------------------------------- void main(void) intÇü ¹è¿­À» ÃʱâÈ­ÇÑ´Ù. { | static int x[5] = {100, 200, 300, 400, 500}; -+ int i, *px; +- intÇü Æ÷ÀÎÅÍ º¯¼ö px¸¦ Á¤ÀÇÇÑ´Ù. +----+ ¹øÁö°ªÀ» Ãâ·ÂÇÒ ¶§´Â %p ¼­½ÄÀ» ¾´´Ù. px = x; | printf("px = x; px = %p\n", px); px = &x[0]; printf("px = &x[0]; px = %p\n", px); printf("\n\ni px + i *(px + i) px[i] x[i]\n\n"); for (i = 0; i <= 4; i++) printf("%d%9p%9d%9d%6d\n\n", i, px + i, *(px + i), px[i], x[i]); } +---------------+ ÀÌ ¼ö½ÄµéÀº °°Àº °ªÀ» °¡Áø´Ù. --------------------------------------------------------------------- ½ÇÇà °á°ú(Åͺ¸ C 2.0¿¡¼­ ½ÇÇà) px = x; px = 0194 -+- px = x´Â px = &x[0]¿Í °°Àº °á°ú¸¦°¡Á®¿ÈÀ» px = &x[0]; px = 0194 -+ ¾Ë ¼ö ÀÖ´Ù. ¹øÁö°ª 0194´Â »óȲ¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖÀ¸´Ï ¹øÁö°ª ÀÚü¿¡ ±¥³äÄ¡ ¸»±â ¹Ù¶õ´Ù. +-------+------+------+ i px + i *(px + i) px[i] x[i] | ¼­·Î °°Àº(equivalent) °ªÀ» °¡Áø´Ù. 0 0194-+ 100 100 100 +-+ 1 0196-+ | 200 200 200 | 2 0198 | 300 300 300 | 3 019A | 400 400 400 | 4 019C | 500 500 500 | ¹øÁö°ªÀÌ sizeof(*px) == sizeof(int) == 2¾¿ Áõ°¡ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. --------------------------------------------------------------------- À̻󿡼­ ¹è¿­°ú Æ÷ÀÎÅÍÀÇ ¿¬»ê¿¡ À־ [ ]¿Í * & + ¿¬»êÀÚ°¡ °¡Áö ´Â Àǹ̿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾Ò´Ù. ¾Ë¾Æº¸±â´Â ÇßÁö¸¸ ÀÌÇØ°¡ °¡´ÂÁöÀÇ ¿©ºÎ°¡ °ü°ÇÀÌ´Ù. ´ÙÇàÈ÷ ÀÌÇØ°¡ °£´Ù ÇÏ´õ¶óµµ ÀÏü È¥µ¿ÀÌ À־´Â ¾È µÇ°Ú´Ù. ½±°Ô ¸»Çؼ­ Àý´ë·Î Çò°¥¸®Áö ¾Ê¾Æ¾ß ÇÑ´Ù. Á¶±ÝÀÌ¶óµµ Çò°¥·È´Ù°¡´Â Á×µµ ¹äµµ ¾È µÈ´Ù. ƯÈ÷ Áß¿äÇÑ °ÍÀº "°ú¿¬ ¹¹°¡ °°°í", "°ú¿¬ ¹¹°¡ Ʋ¸°Áö", ±×¸®°í "°° ´Ù¸é °ú¿¬ ¿ÏÀüÈ÷ µ¿ÀÏÇÑ °ÍÀÎÁö, ¾Æ´Ï¸é ±×Àú µ¿µîÇÑ °ÍÀÎÁö"¸¦ ¹ÙÀ§µ¹ Ä®·Î µÎµ¿°­ÀÌ ³»µí µü»Ñ·¯Áö°Ô ±¸ºÐÇÏ´Â ÀÏÀÌ´Ù. Ä®·Î ¹° º£µíÀÌ Çß´Ù°¡ ´Â ´õ Å« È¥¶õÀ¸·Î ºÎäÁúÇÏ´Â °á°ú ¹Û¿¡ ¾È µÈ´Ù. ±×·¯¹Ç·Î Áö±Ý ÀÌ ¼ø°£ ÀüÇô Çò°¥¸®Áö ¾Ê´Â´Ù´Â È®½ÅÀÌ ¼­Áö ¾Ê´Â ÇÑ ¸Ó¸®µµ ½ÄÈú °â ÇÏ·ç Á¤µµ Ã¥À» ³õ°í Ç« ½¬¾ú´Ù°¡ ³»ÀÏ ÀÌ ¸¾¶§Âë Çؼ­ ´Ù½Ã Àо°¡´Â °ÍÀÌ Çö¸íÇÑ »óÃ¥À̶ó°í º»´Ù. ¾îÁ¦µµ ¸»ÇßÁö¸¸ ±¦È÷ ¹«¸®ÇÏ°Ô ¿å½É³»¼­ ÇѲ¨¹ø¿¡ ¸¹Àº °ÍÀ» ¾Ë·Á°í ÇÏ´Â °ÍÀº Á¤½Å °Ç°­¿¡ ÀÌ·ÓÁö ¸øÇÏ´Ù. 3.4 *px++, (*px)++, *++px, ++*pxÀÇ Â÷ÀÌ --------------------------------------------------------------------- [1] *px++´Â ¿¬»ê¼øÀ§¿¡ µû¶ó *(px++)¿Í °°´Ù. Áï *px°ªÀ» ±¸ÇÏ°í px¸¦ 1 ¸¸Å­ Áõ°¡½ÃÅ°´Â °ÍÀÌ´Ù. *px++´Â *px¿Í px++ÀÇ µÎ ¼ö½ÄÀ» ¿¬¼ÓÇÏ¿© ¿¬»êÇÑ °á°ú¿Í °°´Ù. [2] (*px)++´Â ÀÏ´Ü *px°ªÀ» ±¸ÇÑ ´ÙÀ½¿¡ *px°ªÀ» 1¸¸Å­ Áõ°¡½ÃŲ´Ù. px´Â Áõ°¡ÇÏÁö ¾Ê´Â´Ù. [3] *++px´Â ¿¬»ê¼øÀ§¿¡ µû¶ó *(++px)¿Í °°´Ù. Áï px¸¦ 1¸¸Å­ Áõ°¡½ÃŲ ´Ù À½¿¡ *px¸¦ ±¸ÇÑ´Ù. *++px´Â ++px¿Í *pxÀÇ µÎ ¼ö½ÄÀ» ¿¬¼ÓÇÏ¿© ¿¬»êÇÑ °á°ú¿Í °°´Ù. [4] ++*px´Â ++(*px)¿Í °°À¸¸ç *pxÀÇ °ªÀ» 1¸¸Å­ Áõ°¡½ÃÅ°°í ±× °ªÀ» °á°ú ·Î ÃëÇÑ´Ù. px´Â Áõ°¡ÇÏÁö ¾Ê´Â´Ù. [5] °¢ ¼ö½ÄÀÌ ´Üµ¶À¸·Î ¾²ÀÏ °æ¿ì, Áï ´Ù¸¥ ¼ö½Ä ³»¿¡ Æ÷ÇÔµÇÁö ¾Ê°í ¾² ÀÏ °æ¿ì [1]°ú [3], [2]¿Í [4]´Â °¢°¢ µ¿µîÇÏ´Ù. ´Üµ¶À¸·Î ¾²ÀÎ a++¿Í ++a°¡ ¼­·Î µ¿µîÇÔ°ú ¸¶Âù°¡ÁöÀÌ´Ù. ÀÌ °æ¿ì °ü½ÀÀûÀ¸·Î [3]¹ø ´ë½Å [ 1]¹øÀ» ÁÖ·Î ¾´´Ù. [2]¿Í [4] Áß¿¡¼­´Â ¸¶À½¿¡ µå´Â °ÍÀ¸·Î °ñ¶ó¾²¸é µÈ´Ù. --------------------------------------------------------------------- Æ÷ÀÎÅ͸¦ ½ÊºÐ È°¿ëÇÏ·Á¸é À̻󿡼­ ¼³¸íÇÑ 4°³ÀÇ ¼ö½ÄÀ» ÀÚÀ¯ÀÚÀç·Î ´Ù·ê ÁÙ ¾Ë¾Æ¾ß ÇÑ´Ù. <¿¹Á¦ 3>¿¡ °¢ ¼ö½ÄÀÇ ½ÇÁ¦ »óȲÀ» ¿¹·Î µé¾ú´Ù. ±¸ Â÷ÇÏ°Ô ¼³¸íÀ» ÇÏÁö´Â ¾ÊÀ»Å×´Ï µ¶ÀÚ ½º½º·Î ºÐ¼®ÇÏ¿© °á·ÐÀ» ³»¸®±â ¹Ù¶õ ´Ù. (printf ÇÔ¼öÀÇ ¼­½Ä¹®ÀÚ¿­¿¡¼­ %p ¼­½ÄÀº ¹øÁö°ªÀ» Ãâ·ÂÇϱâ À§ÇÑ °Í ÀÌ´Ù. ¸ÅÅ©·Î ÇÔ¼ö printexpr¿¡ ¾²ÀÎ #exprÀº ±×·¯·Á´Ï Çϱ⠹ٶõ´Ù.) µ¡ºÙ¿©¼­ 4°³ÀÇ ¼ö½Ä Áß¿¡¼­ »ç¿ëºóµµ°¡ °¡Àå ³ôÀº °ÍÀº *px++ÀÓÀ» Âü °íÇØ µÎ¸é ÁÁ°Ú´Ù. <¿¹Á¦ 3> *px++,(*px)++, *++px, ++(*px)ÀÇ ºñ±³ ºÐ¼® --------------------------------------------------------------------- #define initpx(i) printf("px == %p\n", px = x + i); #define printexpr(expr) printf("Operation: " #expr " == %d\n", expr) #define printpx() printf("After operation... px == %p\n", px) #define printpx2() printf(" *px == %d\n\n", *px) void main(void) { static int x[5] = {100, 200, 300, 400, 500}; int *px; initpx(0); printexpr(*px++); printpx(); printpx2(); initpx(0); printexpr((*px)++); printpx(); printpx2(); initpx(3); printexpr(*px++); printpx(); printpx2(); initpx(3); printexpr(++(*px)); printpx(); printpx2(); } --------------------------------------------------------------------- ½ÇÇà °á°ú(¹øÁö°ªÀº »óȲ¿¡ µû¶ó ´Þ¶óÁø´Ù. µû¶ó¼­ ¹øÁöÀÇ »ó´ëÀûÀÎ °ª¿¡¸¸ ÁÖ¸ñÇϱ⠹ٶõ´Ù.) px == 0194 Operation: *px++ == 100 After operation... px == 0196 *px == 200 px == 0194 Operation: (*px)++ == 100 After operation... px == 0194 *px == 101 px == 019A Operation: *px++ == 400 After operation... px == 019C *px == 500 px == 019A Operation: ++(*px) == 401 After operation... px == 019A *px == 401 --------------------------------------------------------------------- ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #29 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ2-4: Æ÷ÀÎÅÍ ¿¬»êÀÇ Á¤º¹ 03/06 00:50 206 line --------------------------------------------------------------------- 4 ¸Å°³º¯¼ö°¡ ÀÏÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö --------------------------------------------------------------------- Áö±Ý±îÁö Æ÷ÀÎÅÍÀÇ °³³ä°ú ±× ¿¬»ê ¹æ¹ýÀ» °í»ý°í»ýÇؼ­ ÀÍÈù ÀÌÀ¯¸¦ ÂùÂùÈ÷ µûÁö°í º¸¸é ¸Å°³º¯¼ö°¡ ¹è¿­ÀÎ ÇÔ¼ö¸¦ ¸¸µé±â À§ÇÔÀ̶ó°í º¸¾Æµµ °ú¾ðÀÌ ¾Æ´Ï´Ù. ¸Å°³º¯¼ö°¡ ¹è¿­ÀÎ ÇÔ¼ö°¡ ¾ðÁ¨°¡ ÇÑ ¹øÀº ²À ÇÊ¿äÇϱ⠸¶·ÃÀÌ´Ù. ±× ·±µ¥ ¸Å°³º¯¼ö¿Í ¸®ÅÏ°ªÀ¸·Î ¹è¿­ Àüü¸¦ Åëä·Î ÁÖ°í ¹Þ°í ÇÒ ¼ö´Â ¾ø´Â ±î´ß¿¡ ±× ÇÔ¼ö´Â¹2è¿­À» Æ÷ÀÎÅÍ·Î °£Á¢ Á¶ÀÛÇÒ ¼ö ¹Û¿¡ ¾ø´Ù. ¿ÜºÎ¹è¿­À» ¾²Áö ¾Ê´Â ÇÑ ´Ù¸¥ °÷¿¡ Á¤ÀǵǾî ÀÖ´Â ¹è¿­À» Æ÷ÀÎÅ͸¦ ¾²Áö ¾Ê°í ¿øÇϴ ƯÁ¤ ÇÔ¼ö ³»¿¡¼­ Á¶ÀÛÇÒ ¼ö ÀÖ´Â ¹æµµ´Â »ç½Ç»ó Àü¹«ÇÏ ´Ù. °Ô´Ù°¡ ¿ÜºÎ¹è¿­À» ¾²´Â °ÍÀº ÇÁ·Î±×·¥ °³¹ß °úÁ¤¿¡¼­ ¹ú·¹ÀÇ À§Ç輺 À¸·Î ÀÎÇÑ ¹«½ÃÇÏÁö ¸øÇÒ ºÎÀÛ¿ëÀÌ µû¸£±â ¶§¹®¿¡ ¸Å°³º¯¼ö°¡ ¹è¿­ÀÎ ÇÔ¼ö ¸¦ ¾ðÁ¨°¡´Â ¸¸µé¾î ¾µ ¼ö ¹Û¿¡ ¾ø´Ù. ±×·¯ÀÚ¸é ½È¾îµµ ¾î¿ ¼ö ¾øÀÌ Æ÷ÀÎ Å͸¦ ½á¾ßÇÑ´Ù. 4.1 ¸Å°³º¯¼ö°¡ ÀÏÂ÷¿ø ¹è¿­ÀÎ ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ý ¸Å°³º¯¼ö°¡ ÀÏÂ÷¿ø ¹è¿­ÀÎ 2ÇÔ¼ö´Â Æ÷ÀÎÅ͸¦ ½á¼­ °£´ÜÇÏ°Ô ¸¸µé ¼ö ÀÖ ´Ù. <¿¹Á¦ 4>ÀÇ sum°ú sum2¶ó´Â ÇÔ¼ö°¡ ½Ç·ÊÀÌ´Ù. sum°ú sum2°¡ ÇÏ´Â ÀÏÀº doubleÇü Æ÷ÀÎÅÍ px°¡ °¡¸®Å°´Â ¹è¿­¿ä¼Ò·ÎºÎÅÍ n°³ÀÇ ¿ä¼Ò¸¦ ÇÕ»êÇÏ´Â °Í ÀÌ´Ù. sum2´Â ¹è¿­À» ÇÕ»êÇÏ´Â ¹æ¹ýÀÌ ¾à°£ ´Ù¸¦ »ÓÀÌ°í °á°ú´Â sum°ú ¶È°° ´Ù. sumÀº Æ÷ÀÎÅÍÀÇ °üÁ¡¿¡¼­ ¹è¿­À» ÇÕ»êÇß°í sum2´Â ¹è¿­ÀÇ °üÁ¡¿¡¼­ ¹è ¿­À» ÇÕ»êÇß´Ù. ¶È°°Àº pxÀÇ ¼±¾ðÀÌ¶óµµ º¸´Â °üÁ¡¿¡ µû¶ó µÎ °¡Áö ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. Çϳª´Â double *pxÀÌ°í ³ª¸ÓÁö Çϳª´Â double px[]ÀÌ´Ù. <¿¹Á¦ 4> ¸Å°³º¯¼ö°¡ 2¹è¿­ÀÎ ÇÔ¼ö --------------------------------------------------------------------- #define printexpr(expr) printf(#expr " == %.1f\n", expr) double sum(double x[], unsigned n); double sum2(double x[], unsigned n); void main(void) { double x[] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.}; printexpr(sum(x, sizeof(x) / sizeof(double)));---¹è¿­ Àüü¸¦ ÇÕ»ê printexpr(sum2(x, sizeof(x) / sizeof(double))); printexpr(sum(x, 5)); --- ¹è¿­¿ä¼Ò [0],...,[4]¸¦ ÇÕ»êÇÑ´Ù. 2 printexpr(sum(x + 5, 5)); --+- ¹è¿­¿ä¼Ò [5],...,[9]¸¦ ÇÕ»êÇÑ´Ù. printexpr(sum(&x[5], 5)); --+ } +-----------------+ | | double sum(double *px, unsigned n) | { +-------+----- Æ÷ÀÎÅÍÀÇ °üÁ¡¿¡¼­ ÇÕ»ê double sum = 0.; | | | +-µÎ ¼±¾ðÀº ¼­·Î ¿ÏÀüÈ÷ µ¿ÀÏÇÔ while (n-- > 0) sum += *px++; | return sum; | } +-2--------------+ | double sum2(double px[], unsigned n) { int i; +-------¹è¿­ÀÇ °üÁ¡¿¡¼­ ÇÕ»ê double sum = 0.; | | for (i = 0; i < n; i++) sum += px[i]; return sum; } --------------------------------------------------------------------- ½ÇÇà °á°ú sum(x, sizeof(x) / sizeof(double)) == 55.0 sum2(x, sizeof(x) / sizeof(double)) == 55.0 sum(x, 5) == 15.0 sum(x + 5, 5) 2== 40.0 sum(&x[5], 5) == 40.0 --------------------------------------------------------------------- 4.2 ¹è¿­ÀÇ ³¡À» °¨ÁöÇÏ´Â ¹æ¹ý Æ÷ÀÎÅÍ´Â ¿ø·¡ºÎÅÍ ¹è¿­ÀÇ Å©±â¸¦ ¾ËÁö ¸øÇÑ´Ù. ¸¶Âù°¡Áö·Î Æ÷ÀÎÅÍ´Â ¹è¿­ÀÇ ½ÃÀÛ°ú ³¡À» °¨ÁöÇÏÁö ¸øÇÑ´Ù. ¿©±â¼­ ¸Å°³º¯¼ö°¡ ¹è¿­ÀÎ ÇÔ¼ö°¡ ¹ü¿ë¼ºÀ» °¡Áú ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ´ë´ÜÈ÷ Æí¸®ÇÑ À¶Å뼺ÀÌ µå·¯³­´Ù. --------------------------------------------------------------------- C¿¡¼­´Â Å©±â°¡ °¡º¯ÀÎ ¹è¿­À» ´Ù·ç´Â ÇÔ¼ö¸¦ ¸Å¿ì ¼Õ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ---2------------------------------------------------------------------ ÆĽºÄ®¿¡¼­´Â ¹è¿­Å©±â¸¦ ¹Ýµå½Ã ¸í½ÃÇØ¾ß ÇÔ°ú ºñ±³Çغ¸¸é CÀÇ ÇÔ¼ö ´Â ¾öû³­ À¶Å뼺À» ¹ßÈÖÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ Á¡ÀÌ ¹Ù·Î C ÀÇ À¶Å뼺À» ´ëº¯ÇÏ´Â °¡Àå Å« Ư¡ÀÌ´Ù. ¾î·µç Æ÷ÀÎÅ͸¸À¸·Î´Â ¹è¿­ÀÇ ½ÃÀÛ°ú ³¡À» ¾Ë¾Æ³»´Â °ÍÀÌ ºÒ°¡´ÉÇÏ ´Ù. ±×·±µ¥ ¹è¿­ÀÇ ½ÃÀÛÀº ¾îÂ÷ÇÇ ÇÔ¼öÀÇ ¸Å°³º¯¼ö¸¦ ÅëÇØ Àü´ÞµÇ¹Ç·Î ÇÊ ¿äÇÑ °ÍÀº ¹è¿­ÀÇ ³¡À» °¨ÁöÇÏ´Â ¹æ¹ýÀÌ´Ù. ¹æ¹ýÀº ´ë·« µÎ °¡Áö°¡ ÀÖÀ» ¼ö ÀÖ´Ù. -------------------2-------------------------------------------------- ù°, ÇÔ¼öÀÇ ¸Å°³º¯¼ö·Î ¹è¿­ÀÇ ½ÃÀÛÀ» °¡¸®Å°´Â Æ÷ÀÎÅÍ¿Í ÇÔ²² ¹è¿­Å©±â ¸¦ µ¿½Ã¿¡ Àü´ÞÇÏ´Â °ÍÀÌ´Ù. <¿¹Á¦ 4>ÀÇ sum ÇÔ¼ö°¡ ÀÌ¿¡ ÇØ´çÇÑ´Ù. ÀÌ°ÍÀº Å©±â°¡ °¡º¯ÀÎ ¹è¿­À» ´Ù·ç´Â °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀÌ´Ù. µÑ°, ÇÁ·Î±×·¡¸Ó°¡ Ưº°È÷ ¾à¼ÓµÈ Ç¥Áö¸¦ ¹è¿­¿¡ Çصδ °ÍÀÌ´Ù. ¿¹ÄÁµ¥ ¹®ÀÚ¿­ÀÇ ³Î Á¾·á¹®ÀÚ '\0'°°Àº °ÍÀÌ ±×·¯ÇÑ Ç¥ÁöÀÇ ´ëÇ¥ÀûÀÎ ½Ç·Ê ¿¡ ÇØ´çÇÑ´Ù. Áï ó¸®ÇÏ°íÀÚ ÇÏ´Â ¹è¿­ÀÇ ÃÖÈÄ ¿ä¼Ò¿¡ 0°ú °°Àº Ư º°ÇÑ °ªÀ» µÒÀ¸·Î2½á ÇÔ¼ö·Î ÇÏ¿©±Ý ¹è¿­ÀÇ ³¡À» °¨ÁöÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¹æ¹ýÀÌ´Ù. --------------------------------------------------------------------- µÎ °¡Áö ¹æ¹ýÀ» ºñ±³ÇØ º¼ ¶§ µÎ¹ø° ¹æ¹ýÀº ¹®ÀÚ¿­ ¶Ç´Â ¹®ÀÚ ¹è¿­À» ´Ù·ê ¶§ ÁÖ·Î ¾²ÀÌ°í ù¹ø° ¹æ¹ýÀº ±× ÀÌ¿ÜÀÇ ÀϹÝÀûÀÎ ¹è¿­À» ´Ù·ê ¶§ ÈçÈ÷ ¾²ÀδÙ. 4.3 double x[]¿Í double *x ´ÙÀ½À¸·Î <¿¹Á¦ 4>¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¸®½ºÆ®¿¡¼­´Â ¾Æ·¡ÀÇ µÎ ¼±¾ðÀÌ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. double[]¶ó´Â ¼±¾ðÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â ±×°ÍÀÌ Çü½Ä¸Å°³º2¯¼ö(formal parameter)ÀÇ "¼±¾ð(declaration)"À̱⠶§¹® ÀÌ´Ù. +------------+ | double x[] | | double *x | +------------+ µÑ ´Ù doubleÇü ¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅÍ º¯¼ö·Î¼­ Çü½Ä¸Å°³º¯¼ö x¸¦ ¼±¾ðÇÑ °ÍÀÌ´Ù. ÁÖ¸ñÇÒ °ÍÀº double x[]¶ó°í x¸¦ ¼±¾ðÇßÁö¸¸ x´Â »ó¼ö(¹è ¿­ »ó¼ö)°¡ ¾Æ´Ï¶ó º¯¼ö(Çü½Ä¸Å°³º¯¼ö)¶ó´Â Á¡ÀÌ´Ù. ´õ¿í ÁÖÀÇÇÒ »çÇ×Àº d ouble x[]¶ó´Â ¼±¾ðÀÌ ¿ÜºÎº¯¼öÀÇ ¼±¾ð ¹æ¹ý°ú ºñ±³Çغ¼ ¶§ ±× ÇüÅ´ À¯ »çÇÏ´õ¶óµµ ±× Àǹ̴ ÀüÇô ´Ù¸£´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ¾Æ·¡¿Í °°Àº2 ¿Ü ºÎº¯¼ö ¼±¾ð°ú Çü½Ä¸Å°³º¯¼öÀÇ ¼±¾ðÀÌ ÀÖÀ» °æ¿ì, extern double x[]; double function(double px[], ......) { ...... } extern double x[]´Â x¶ó´Â ¿ÜºÎ¹è¿­À» ¾Ë¸®´Â ¼±¾ðÀ̹ǷΠ¹è¿­¸í x´Â "¹è ¿­ »ó¼ö(Æ÷ÀÎÅÍ »ó¼ö)"·Î¼­ ¾Ë·ÁÁø´Ù. µû¶ó¼­ x++¿Í °°Àº ¼ö½ÄÀ» ¾²¸é C ÄÄÆÄÀÏ·¯°¡ ¸÷½Ã ½ÉÇÑ °ÅºÎ ¹ÝÀÀÀ» ÀÏÀ¸Å²´Ù. ±×·¯³ª double px[]´Â Çü½Ä ¸Å°³º¯¼ö·Î¼­ ¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅÍ px¸¦ ¼±¾ðÇÑ °ÍÀ̹ǷΠpx´Â "Æ÷ÀÎÅÍ º¯¼ö"°¡ µÈ´Ù. µû¶ó¼­ px++¿Í °°Àº ¼ö½ÄÀº ¾Æ¹«·± ÀúÇ×¾øÀÌ °è»êµÈ´Ù. ¸¶ Âù°¡Áö·Î 2¾Æ·¡ÀÇ µÎ ¼±¾ð ¿ª½Ã ÀüÇô ´Ù¸¥ Àǹ̸¦ °¡Áø´Ù. extern double x[]; <--- ÀÏÂ÷¿ø ¹è¿­À» ¼±¾ð extern double *px; <--- Æ÷ÀÎÅÍ º¯¼ö¸¦ ¼±¾ð ÀÌó·³ À¯»çÇÑ ÇüÅÂÀÇ ¼±¾ðÀÏÁö¶óµµ ±× ¼±¾ðÀÌ À§Ä¡ÇÑ °÷¿¡ µû¶ó ÀüÇô ´Ù¸¥ Àǹ̸¦ °¡Áö¹Ç·Î ¸¶¶¥È÷ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀÌ´Ù. ¸¸¾à double x[]¿Í dou ble px[]ÀÇ Â÷ÀÌÁ¡ÀÌ ¸íÈ®È÷ ±¸ºÐµÇÁö ¾Ê´Â´Ù¸é ¾ÈÀüÀ» ±âÇϱâ À§ÇØ ¾Æ¿¹ int *px¶ó´Â Çü½Ä¸Å°³º¯¼ö ¼±¾ð ¹æ½Ä¸¸À» °íÁýÇÏ¿© ¾²´Â °ÍÀÌ ¼Ó ÆíÇÒ °Í À¸·Î º»´Ù. 4.4 Á¤·Ä ÇÔ¼ö bubbleÀÇ ÀÛ¼º ¸Å°³º¯¼ö°¡ ¹è¿­ÀÎ ÇÔ¼2öÀÇ ÀüÇüÀûÀÎ ¿¹·Î¼­ Á¤·Ä ÇÔ¼ö¸¦ »©³õÀ» ¼ö°¡ ¾ø´Ù. ¿©±â¼­´Â ¼ö ¸¹Àº Á¤·Ä ¾Ë°í¸®Áò Áß¿¡¼­ °¡Àå °£´ÜÇÏ´Ù°í Á¤ÆòÀÌ ³ª ÀÖ´Â n2 °è¿­ÀÇ °ÅÇ° Á¤·Ä(bubble sort)À» ¾²±â·Î ÇÑ´Ù. <¿¹Á¦ 5> °ÅÇ° Á¤·Ä(bubble sort) --------------------------------------------------------------------- #include <--- ¸ÅÅ©·Î ÇÔ¼ö randomize¿Í randomÀÌ Á¤ÀǵǾî ÀÖ´Ù. #define MAX 20 void bubble(int x[], unsigned n); <--- ÇÔ¼ö ¼±¾ð void main(void) { int x[MAX]; int i; 2 +---³­¼ö ¹ß»ý±â¸¦ ÃʱâÈ­ÇÑ´Ù. | +---³­¼ö¸¦ ¹ß»ý½ÃŲ´Ù. randomize(); | | for (i = 0; i < MAX; i++) x[i] = random(100); printf("\nGenerated array:"); for (i = 0; i < MAX; i++) printf("%3d", x[i]); bubble(x, MAX); printf("\nSorted array: "); for (i = 0; i < MAX; i++) printf("%3d", x[i]); } void bubble(int x[], unsigned n) { regipser i, j; int temp; for (i = 0; i < n - 1;2 i++) for (j = n - 1; j > i; j--) { if (x[j - 1] <= x[j]) continue; temp = x[j - 1]; ---+ x[j - 1] = x[j]; +- x[j - 1]°ú x[j]¸¦ ±³È¯ÇÑ´Ù. x[j] = temp; ---+ } } --------------------------------------------------------------------- ½ÇÇà ¿¹ Generated array: 52 66 4 80 41 47 95 62 68 30 64 29 85 60 97 75 69 72 3 13 Sorted array: 4 13 29 30 33 41 47 52 60 62 64 66 68 69 72 75 80 85 9 97 --------------------2------------------------------------------------- ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç #30 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] CÆ÷ÀÎÅÍ2-5: Æ÷ÀÎÅÍ ¿¬»êÀÇ Á¤º¹ 03/06 00:51 164 line --------------------------------------------------------------------- 5 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- Áö±Ý±îÁö »çÈê¿¡(³»Áö´Â ÇÑ ´Þ¿¡) °ÉÃÄ Æ÷ÀÎÅÍ ¿¬»ê¿¡ °üÇØ Àü¹ÝÀûÀ¸ ·Î ÀÍÇû´Ù. µ¶ÀÚ ¿©·¯ºÐÀÌ Á¦´ë·Î ÀÍÇû´ÂÁö ±¸¿ü´ÂÁö »î¾Æ¸Ô¾ú´ÂÁö´Â ¾Ë ¼ö ¾øÀ¸³ª, ¾Æ¹¸µç ÇÊÀÚ´Â °ÔÀÇÄ¡ ¾Ê°í ´ÙÀ½ ¿¬À縦 À̾°¥ °ÍÀÌ´Ù. ³« ¿ÀÀÚ´Â »óó¸¸ÀÌ ³²À» °ÍÀÌ´Ï ¸ÅÁøÇϽöó! ´ÙÀ½¿¡´Â Ç¥ÁØÀûÀÎ C ¾ð¾î Àüü¸¦ ÅëÅо ÇÔ¼ö Æ÷ÀÎÅÍ ´ÙÀ½À¸·Î °¡Àå ³­ ÇØÇÏ´Ù°í °ø½Ä ÀÎÁ¤µÇ°í ÀÖ´Â "´ÙÂ÷¿ø ¹è¿­À» Æ÷ÀÎÅÍ·Î ´Ù·ç´Â ¹æ¹ý"¿¡ ´ë ÇÏ¿© ÁýÁßÀûÀ¸·Î Ž±¸ÇÏ°íÀÚ ÇÑ´Ù. °ü½ÉÀÖ´Â »ç¶÷Àº ÇÑ ´Þ¸¸ ±â´Ù¸®½Ã¶ó. ¸ðµç Àǹ®Á¡ÀÌ ¾¥-¾Ç ¾Ä°Ü ³»·Á °¥Å×´Ï ¸»ÀÌ´Ù. --------------------------------------------------------------------- ºÎ·Ï ´ýÀ¸·Î --------------------------------------------------------------------- Áö³­ ´Þ°ú ¸¶Âù°¡Áö·Î À̹ø¿¡µµ ´ýÀ¸·Î ±×·¡ÇÈ ¿¹Á¦ Çϳª µ¹·Áº¸±â·Î ÇÑ´Ù. ³»¿ë¿¡´Â ½Å°æ¾²Áö ¸»°í ±×Àú ½ÇÇà½ÃÄѺ¸´Â Àç¹Ì¿¡ ¸¸Á·Çϱ⠹ٶõ ´Ù. ¿ì¼± ¿¹Á¦¸¦ globe.c¶ó´Â È­ÀϸíÀ¸·Î ÀԷºÎÅÍ ÇÑ´Ù. ´Ù ÀÔ·ÂÇÏ°í µð ½ºÅ©¿¡ ¼¼À̺êÇßÀ¸¸é, Å°¸¦ ´­·¯ µµ½º·Î ºüÁ®³ª°¡¼­ ÇöÀç µð·º Å丮(current directory)¿¡ herc.bgi¶ó´Â ±×·¡ÇÈ ±¸µ¿±â(graphics driver) È­ÀÏÀÌ ÀÖ´ÂÁö Á¡°ËÇÑ´Ù. ÀÌ È­ÀÏÀÌ ¾øÀ¸¸é ¿¹Á¦°¡ ½ÇÇàµÇÁö ¾Ê´Â´Ù. EGA »ç¿ëÀÚ¶ó¸é ±×°Í ´ë½Å¿¡ egavga.bgi¶ó´Â ±×·¡ÇÈ ±¸µ¿±â È­ÀÏÀÌ ÇÊ¿äÇÏ´Ù. Á¡°ËÇßÀ¸¸é µµ½º ¸í·ÉÇà¿¡ exit¢¢¸¦ ÀÔ·ÂÇÏ¿© Åͺ¸ C ÅëÇÕ °³¹ß ȯ°æ(¾àĪ IDE)À¸·Î µÇµ¹¾Æ¿Â´Ù. ±×·± ´ÙÀ½, ¸¸¾à µ¶ÀÚÀÇ Åͺ¸ C°¡ ¹öÀü2.0À̶ó¸é, Å°¸¦ ´­·¯ ÄÄÆÄ ÀÏ ¡Ý¸µÅ©°¡ ¹«»çÈ÷ ³¡³ª´Â°¡ È®ÀÎÇÏ°í Å°¸¦ ´­·¯¼­ ¿¹Á¦¸¦ ½ÇÇà ½ÃŲ´Ù. ¸¸¾à Åͺ¸ C 1.5¶ó¸é ¾Æ·¡ µÎ ÁÙÀÇ Â©¸·ÇÑ ³»¿ëÀ» globe.prj¶ó´Â È­ÀÏ ¸íÀ¸·Î ÀÔ·ÂÇÑ µÚ Å°¸¦ ´­·¯ µð½ºÅ©¿¡ ¼¼À̺ê½ÃŲ´Ù. --------------------------------------------------------------------- globe graphics.lib --------------------------------------------------------------------- ÀÌÁ¦ ¸¦ ´­·¯ "Project" ¸Þ´º¸¦ ¼±ÅÃÇÏ°í °ðÀ̾î "Project nam e" Ç׸ñÀ» ÅÃÇÑ´Ù. ±×·¯¸é IDE°¡ ÇÁ·ÎÁ§Æ® È­ÀϸíÀÇ ÀÔ·ÂÀ» ¿ä±¸Çϴµ¥ gl obe¢¢¶ó°í ÀÔ·ÂÇÏ¸é µÈ´Ù. ±×·± ´ÙÀ½ Å°¸¦ ´­·¯ ÄÄÆÄÀÏ, ¸µÅ©°¡ ¹«»ç È÷ ³¡³ª´ÂÁö È®ÀÎÇÏ°í Å°¸¦ ´­·¯ ¿¹Á¦¸¦ ½ÇÇà½ÃŲ´Ù. ¿¹Á¦¸¦ ½ÇÇà½ÃÅ°¸é È­¸é¿¡ Áö±¸º»ÀÌ Çϳª ±×·ÁÁú °ÍÀÌ´Ù. ÀÚ¼¼È÷ º¸¸é Áö±¸º» °¡¿îµ¥¿¡ Á¡ÀÌ Çϳª ÂïÇô ÀÖÀ»ÅÙµ¥, °Å±â°¡ ¾îµð³Ä Çϸé, ÇÊÀÚ°¡ »ç´Â ÁýÀÌ´Ù. <´ý ¿¹Á¦> Áö±¸º» ±×¸®±â --------------------------------------------------------------------- /* File GLOBE.C: Terrestrial Globe - HGC/EGA version */ #include #include typedef enum {false, true} boolean; void graph(double y, double z, int *plotted); void rotate3d(double xr, double yr, double zr, double *px, double *py, double *pz); #define LATITUTE 37.29 Áö±¸º» Áß¾ÓÁ¡ÀÇ À§µµ¿Í °æµµ(º¯°æ °¡´É) #define LONGITUTE 127.04 ÀÌ °ª ÀÌ¿ÜÀÇ ¼öÄ¡´Â ¼Õ´ëÁö ¸» °Í /* |z */ #define RADIUS 200. /* | */ #define ZROTATE -LONGITUTE /* p/| */ #define YROTATE -LATITUTE /* |+------ y */ #define XROTATE 22.5 /* /-/ */ #define INTERVAL 15. /* / fi */ /* x */ void main(void) { int graphdrive = DETECT, graphmode; int plotted; double x, y, z; double p, fi; double zr, yr, xr; initgraph(&graphdrive, &graphmode, ""); xr = XROTATE * M_PI / 180.; yr = YROTATE * M_PI / 180.; zr = ZROTATE * M_PI / 180.; circle(getmaxx() / 2, getmaxy() / 2, RADIUS); circle(getmaxx() / 2, getmaxy() / 2, 1); /* Latitute */ for (p = M_PI_2; p > -M_PI_2; p -= INTERVAL * M_PI / 180.) { plotted = false; if (fabs(p - 0.) < 1.e-5) setlinestyle(SOLID_LINE, 0, THICK_WIDTH); else setlinestyle(SOLID_LINE, 0, NORM_WIDTH); for (fi = 0.; fi <= 2. * M_PI; fi += M_PI / 24.) { x = RADIUS * cos(p) * cos(fi); y = RADIUS * cos(p) * sin(fi); z = RADIUS * sin(p); rotate3d(xr, yr, zr, &x, &y, &z); if (x < 0.) plotted = false; else graph(y, z, &plotted); } } /* Longitute */ for (fi = 0.; fi < M_PI; fi += INTERVAL * M_PI / 180.) { plotted = false; if (fi == 0.) setlinestyle(SOLID_LINE, 0, THICK_WIDTH); else setlinestyle(SOLID_LINE, 0, NORM_WIDTH); for (p = 0.; p <= 2. * M_PI; p += M_PI / 24.) { x = RADIUS * cos(p) * cos(fi); y = RADIUS * cos(p) * sin(fi); z = RADIUS * sin(p); rotate3d(xr, yr, zr, &x, &y, &z); if (x < 0.) plotted = false; else graph(y, z, &plotted); } } getch(); closegraph(); } /* Rotation order : z axis -> y axis -> x axis */ void rotate3d(double xr, double yr, double zr, double *px, double *py, double *pz) { double x = *px, y = *py, z = *pz; double x1, y1, z1, x2, y2, z2, x3, y3, z3; x1 = x * cos(zr) - y * sin(zr); y1 = x * sin(zr) + y * cos(zr); z1 = z; x2 = x1 * cos(yr) - z1 * sin(yr); y2 = y1; z2 = x1 * sin(yr) + z1 * cos(yr); x3 = x2; y3 = y2 * cos(xr) - z2 * sin(xr); z3 = y2 * sin(xr) + z2 * cos(xr); *px = x3; *py = y3; *pz = z3; } void graph(double y, double z, int *plotted) { int xx, yy, xasp, yasp; getaspectratio(&xasp, &yasp); xx = getmaxx() / 2 + (int)y; yy = getmaxy() / 2 - (int)(z * xasp / yasp); if (*plotted == false) moveto(xx, yy); else lineto(xx, yy); *plotted = true; } --------------------------------------------------------------------- <Á¦2ȸ ³¡> ´ÙÀ½ ±Û·Î °è¼Ó À̾îÁý´Ï´Ù. turbo28 Åͺ¸ÀÌ»¡ ÀÓ ÀÎ °Ç