[ 1Àå, 2Àå, 3Àå, 4Àå, 5Àå, 6Àå, 7Àå, 8Àå, 9Àå, 10Àå, 11Àå, 12Àå, 13Àå, 14Àå, 15Àå, 16Àå, 17Àå, 18Àå, 19Àå, 20Àå, 21Àå, 22Àå, 23Àå, 24Àå, 25Àå, 26Àå, 27Àå, ºÎ·ÏA, ºÎ·ÏB,C, ºÎ·ÏD, GNU C ¶óÀ̺귯¸® ¸ñ·Ï ]

À̱ÛÀº ÇÏÀÌÅÚ ¼ÒÇÁÆ®¿þ¾îµ¿È£È¸ÀÇ ¼Ò¸ðÀÓÀÎ Á÷ÀåÀÎÀ» À§ÇÑ ¾¾¸ðÀÓ¿¡¼­ ÀåÀå 2³â°£ÀÇ ´ëÀåÁ¤À¸·Î ¹ø¿ªµÇ¾îÁø ¹®¼­ÀÔ´Ï´Ù. Áö±ÝÀº Á÷¾¾ÀåÀ» Áö³»°í ÀÖ´Â ±è¼Ò¿µ(flpigy)´Ô°ú Á¶¿øºÀ(thirnine)´Ô, °í¼®°©´Ô(sukgab)ÀÇ °øµ¿¹ø¿ªÀÔ´Ï´Ù.

ºÎ·Ï A. ¶óÀ̺귯¸®¿¡ ÀÖ´Â C ¾ð¾î ±â´Éµé.

C ¶óÀ̺귯¸®¿¡ ÀÇÇØ¼­ ½ÇÇàµÇ´Â ±â´ÉµéÁß ¾î¶² °ÍÀº C ¾ð¾î ±× ÀÚüÀÇ ÀϺÎó·³ »ý°¢µÉ ¼ö ÀÖ ´Ù. ±× ±â´ÉµéÀº ¶óÀ̺귯¸® ¸Å´º¾óÀÌ ¾Æ´Ï¶ó, C ¾ð¾î ¸Å´º¾ó¿¡¼­ ¹®¼­È­µÇ¾î¾ß ÇÏÁö¸¸, ¿ì¸®´Â ¾Æ Á÷ ±× C ¾ð¾î ¸Å´º¾óÀ» ¸¸µéÁö ¾Ê¾Ò±â ¶§¹®¿¡, ±× ±â´ÉµéÀ» À̰÷¿¡¼­ ¼³¸íÇÒ °ÍÀÌ´Ù.

A.1 ³»ºÎÀû Àϰü¼ºÀ» ¸í¹éÇÏ°Ô Å×½ºÆ®Çϱâ.

´ç½ÅÀÌ ÇÁ·Î±×·¥À» ¸¸µé ¶§, "ºÒ°¡´ÉÇÑ" ¿¡·¯³ª ±âº» °¡¼³ÀÇ À§¹Ý¿¡ ´ëÇØ¼­ Àü·«ÀûÀÎ À§Ä¡¿¡¼­ ±× µéÀ» üũÇÏ´Â °ÍÀº ÁÁÀº »ý°¢ÀÌ´Ù. ±× üũ´Â ÇÁ·Î±×·¥ÀÇ ´Ù¸¥ ºÎºÐµé »çÀÌ¿¡¼­ ºÒÈ­ÇÕÀ¸·Î ÀÏ¾î ³ª´Â ¹®Á¦µéÀ» µð¹ö±ëÇϴµ¥ À¯ÀÍÇÏ´Ù.

Çì´õÆÄÀÏ `assert.h'¿¡ Á¤ÀǵÈ, assert ¸ÅÅ©·Î´Â ÇÁ·Î±×·¥ÀÇ ¿¡·¯°¡ °ËÃâµÈ °÷¿¡¼­ ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ ·ÂÇÏ´Â µ¿¾È ÇÁ·Î±×·¥À» ÁßÁö½ÃŰ±â¿¡ Æí¸®ÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ´ç½ÅÀÌ ´ç½ÅÀÇ ÇÁ·Î±×·¥À» µð¹ö±ëÇÏ ·ÁÇÒ ¶§, ´ç½ÅÀº Á¤ÀÇµÈ ¸ÅÅ©·Î NDEBUG¸¦ »ç¿ëÇØ¼­ ÀçÄÄÆÄÀÏÇϸé assert ¸ÅÅ©·Î¿¡ ÀÇÇØ¼­ ¼öÇàµÆ ´ø ¿¡·¯ üũ´Â µð¹ö±×ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. À̰ÍÀº ±â´É¹«È¿(disable)·Î üũµÈ ÇÁ·Î±×·¥ ¼Ò½º ÄÚµå ´Â º¯°æÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

±×·¯³ª ±× üũ¸¦ ¹«È¿È­(disabling)ÇÏ´Â °ÍÀº ±× ÇÁ·Î±×·¥À» È®¿¬ÇÏ°Ô ´À¸®°Ô ¸¸µéÁö ¾Ê´ÂÇÑ ¹Ù¶÷ Á÷ÇÏÁö ¾Ê´Ù. ¶ÇÇÑ ´©°¡ ±× ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´øÁö ¹ß»ýÇÒ ¼ö ÀÖ´Â °¡´ÉÇÑ ¿¡·¯¿¡ ´ëÇØ¼­ ´ëºñÇÏ µµ·Ï Á»´õ ¸¹ÀÌ ¿¡·¯¸¦ Ã¼Å©ÇØº¸´Â °ÍÀÌ ÁÁ´Ù. ¶È¶ÈÇÑ »ç¿ëÀÚ´Â ¾î¶² °Í ÀÌ À߸øµÇ¾úÀ» ¶§ ±×°ÍÀ» ÁöÀûÇÏÁö ¾Ê°í ¹«ÀǹÌÇÑ ¸®ÅϰªÀ» °®´Â °Í º¸´Ù´Â Â÷¶ó¸® ÇÁ·Î±×·¥ÀÌ ÆÄ¼ÕµÇ´Â °ÍÀ» ¿øÇÒ °ÍÀÌ´Ù.

¸ÅÅ©·Î : void assert (int expression)

ÇÁ·Î±×·¥ ¾È¿¡¼­ ±× expressionÀÌ ±× ¼ø°£ 0ÀÌ ¾Æ´Ñ°ªÀÌ µÇ´ÂÁö¸¦ °ËÁõÇÑ´Ù. ¸¸ÀÏ NDEBUG °¡ Á¤ ÀǵÇÁö ¾ÊÀ¸¸é, assert´Â expressionÀÇ °ªÀ» Å×½ºÆ®Çϴµ¥, ±× °ªÀÌ 0À̸é, assert´Â ´ÙÀ½ Çü½Äó·³ ¸Þ ½ÃÁö¸¦ ÇÁ¸°Æ®ÇÑÈÄ¿¡ ÇÁ·Î±×·¥À» ÁßÁö½ÃŲ´Ù ( 22.3.4Àý [Aborting a Program] 322 ÆäÀÌÁö ÂüÁ¶)

`file':linenum: Assertion `expression' failed.

Ç¥ÁØ ¿¡·¯ ½ºÆ®¸² stderr¿¡ ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®ÇÑ´Ù ( 7.2Àý [Standard Streams] 63 ÆäÀÌÁö ÂüÁ¶.).

ÆÄÀÏ À̸§°ú ¶óÀÎ ¹øÈ£´Â C Àü󸮱⠸ÅÅ©·Î __FILE__ °ú __LINE__ À¸·ÎºÎÅÍ °¡Á®¿À°í ±× ÆÄÀÏÀÌ ¸§°ú ¶óÀιøÈ£´Â assert°¡ ¾º¿©Á®¼­ È£ÃâµÈ°÷À¸·Î Á¤ÇÑ´Ù. ¸¸ÀÏ Àü󸮱⠸ÅÅ©·Î NDEBUG°¡ `assert.h'°¡ ÀÎŬ·çµåµÈ ÁöÁ¡¿¡¼­ Á¤ÀǵǾú´Ù¸é, assert ¸ÅÅ©·Î´Â ¿ÏÀüÈ÷ ¾Æ¹«°Íµµ ÇÏÁö¾Êµµ·Ï Á¤ÀÇ µÈ °ÍÀ̵ȴÙ.

ÁÖÀÇ : ¸¸ÀÏ NDEBUG°¡ ¿µÇâ·ÂÀ» ¹ßÈÖÇϴ°÷¿¡¼­´Â Àμö expression Ç¥Çö½Äµµ Æò°¡µÇÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ºÎÀÛ¿ëÀÌ ÀÖÀ» ¹ýÇÑ Àμö¸¦ ³Ö°í assert¸¦ »ç¿ëÇÏÁö ¸»¾Æ¶ó. ¿¹¸¦µé¾î, assert(++i>0); Àº ¸¸ÀÏ NDEBUG°¡ Á¤ÀǵȰ÷¿¡¼­´Â iº¯¼ö°¡ Áõ°¡µÇÁö ¾Ê±â ¶§¹®¿¡ ÁÁÁö¾Ê´Ù.

»ç¿ë¹ý ³ëÆ®: assert ±â´ÉÀº ³»ºÎÀû ¸ð¼øÀ» °ËÃâÇϱâ À§Çؼ­ ¼³°èµÇ¾ú´Ù; ±×·¯¹Ç·Î »ç¿ëÀÚ¿¡ ÀÇ ÇÑ ºÎÀû´çÇÑ »ç¿ëÀ̳ª ¹«È¿ÇÑ ÀÔ·ÂÀ» º¸°íÇϴµ¥´Â Àû´çÇÏÁö ¾Ê´Ù.

¸ÅÅ©·Î assert¿¡ ÀÇÇØ ÇÁ¸°Æ®µÈ Áø´Ü ¸Þ½ÃÁö¿¡ ÀÖ´Â Á¤º¸´Â, ´ç½ÅÀÇ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â »ç¿ëÀÚ¿¡ °Ô ¿Ö ÀÔ·ÂÀÌ ¹«È¿ÇÑÁö ¶Ç´Â ¿Ö ¸í·ÉÀÌ ½ÇÇàµÇÁö ¾Ê¾Ò´ÂÁö¸¦ ¾Ë¸®´Âµ¥´Â À¯¿ëÇÏÁö ¾ÊÁö¸¸, ÇÁ·Î±×·¡ ¸Ó³ª ´ç½ÅÀÌ, ÇÁ·Î±×·¥¿¡¼­ ³ªÅ¸³­ ¹ö±×¸¦ ÃßÀûÇϴµ¥ µµ¿òÀÌ µÈ´Ù. ±×·¯¹Ç·Î ´ç½ÅÀº ¿¹ÃøÇÒ ¼ö ¾ø ´Â »ç°Ç¿¡ ´ëÇÑ ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇϴµ¥ assert¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.

´õ ¸»ÇÏÀÚ¸é, assert¿¡ ¹«È¿ÇÑ ÀÔ·ÂÀÌ ÁÖ¾îÁø´Ù¸é ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº ÁßÁöµÈ´Ù_±×°ÍÀº ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇÑ ÈÄ¿¡ 0ÀÌ ¾Æ´Ñ »óȲ(22.3.2Àý [Exit Status] 320 ÆäÀÌÁö ÂüÁ¶.)À¸·Î Á¾·áµÇ°Å³ª, ¶Ç´Â ´Ù¸¥ ¸í ·ÉÀ» Àаųª ´ÙÀ½ ÀÔ·Â ÆÄÀÏ·Î ¿Å±ä´Ù. ÇÁ·Î±×·¥¿¡ ³ªÅ¸³ªÁö ¾ÊÀº ¹ö±× ¹®Á¦¿¡ ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇÏ ´Â°Í¿¡ ´ëÇÑ Á¤º¸´Â 2.3Àý [Error Messages] 17 ÆäÀÌÁö ÂüÁ¶.

A.2 °¡º¯ÀÎÀÚ ÇÔ¼öµé.

ANSI C ´Â ÀμöÀÇ Å¸ÀÔÀ̳ª °³¼ö¸¦ ´Ù¾çÇÏ°Ô ÃëÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦ ¼±¾ðÇϱâ À§ÇÑ ±¸¹®À» Á¤ÀÇÇÑ ´Ù. ( ±×¿Í °°Àº ÇÔ¼öµéÀº varargs ÇÔ¼ö ¶Ç´Â variadic ÇÔ¼ö¶ó°í ºÎ¸¥´Ù. ) ±×·¸Áö¸¸, ¾ð¾î ±× ÀÚü ´Â ±×¿Í °°Àº ÇÔ¼öµéÀ» À§ÇÑ ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù; ´ë½Å¿¡, `stdarg.h'¿¡ Á¤ÀÇµÈ °¡º¯ Àμö ¸ÅÅ©·ÎµéÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÀýÀº ¾î¶»°Ô °¡º¯ÀÎÀÚ ÇÔ¼öµéÀ» ¼±¾ðÇϰí, ¾î¶»°Ô »ç¿ëÇϸç, È£Ãâ ÇÒ°ÍÀÎÁö¿¡ ´ëÇØ¼­ ¼³¸íÇÑ´Ù.

À̽ļº ³ëÆ® : ¸¹Àº ¿À·¡µÈ C ¹æ¾ðµéÀº `varargs.h'¸¦ »ç¿ëÇØ¼­ ´Ù¾çÇÑ °³¼öÀÇ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â ÇÔ¼ö ¸ÞÄ«´ÏÁòÀ¸·Î À¯»çÇÑ °ÍÀ» Á¦°øÇÏÁö¸¸, ȣȯ¼ºÀÌ ¾ø´Ù.

A.2.1 ¿Ö °¡º¯ÀÎÀÚ ÇÔ¼öµéÀÌ »ç¿ëµÇ´Â°¡?

¿ø·¡ C ÇÔ¼öµéÀº °íÁ¤µÈ °³¼öÀÇ ÀμöµéÀ» ÃëÇÑ´Ù. ´ç½ÅÀÌ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ¶§, ´ç½ÅÀº °¢ ÀμöÀÇ µ¥ ÀÌÅÍ Å¸ÀÔÀ» Á¤ÇÑ´Ù. ÇÔ¼ö°¡ È£ÃâµÉ¶§¸¶´Ù ±×Àü¿¡ Á¤ÇØÁø ¿¹»óµÈ °³¼öÀÇ ÀμöµéÀÌ °ø±ÞµÇ´Âµ¥, ±× ÀμöµéÀÇ Å¸ÀÔÀº Á¤ÇØÁø °ÍÀ¸·Î º¯°æµÉ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ±×·¡¼­, ¸¸ÀÏ ÇÔ¼ö `foo'°¡ foo(int, char *); ·Î ¼±¾ðµÈ´Ù¸é, Çϳª´Â ¼ýÀÚ ´Ù¸¥ Çϳª´Â ¹®ÀÚ¿­ Æ÷ÀÎÅÍÀÎ µÎ °³ÀÇ Àμö¸¦ °¡Áö°í foo ÇÔ¼ö¸¦ È£ ÃâÇØ¾ß¸¸ ÇÑ´Ù.

±×·¯³ª ¾î¶² ÇÔ¼öµéÀº Á¤ÇØÁöÁö ¾ÊÀº °³¼öÀÇ Àμö¸¦ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â µ¿ÀÛÀ» ¼öÇàÇÑ´Ù. ¾î¶² °æ ¿ì, ÇÔ¼ö´Â ÇÑ ºí·Ï¿¡ ±×µéÀÇ ¸ðµÎ¸¦ ó¸®ÇÔÀ¸·Î½á ¿©·¯ °³¼öÀÇ °ªµéÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, Á¤ÇØÁø °ªµéÀÇ ÁýÇÕÀ» ÀúÀåÇϱâ À§Çؼ­ mallocÀ¸·Î ÀÏÂ÷¿ø ¹è¿­À» ÇÒ´çÇÏ´Â ÇÔ¼ö¸¦ °í·ÁÇØº¸ÀÚ. ÀÌ ¿¬»êÀº ¼ýÀÚ¿¡ ÇØ´çÇÏ´Â ¹è¿­ÀÇ ±æÀÌ·Î½á ¾î¶² °³¼öÀÇ °ªÀÌ ÀÖ´Ù°í ÀÌÇØÇÑ´Ù. °¡º¯ Àμö ±â´ÉÀÌ ¾ø´Ù¸é, ´ç½ÅÀº °¡´ÉÇÑ ¹è¿­ Å©±â¸¦ ¾ò¾î³»´Â ¶Ç ´Ù¸¥ ÇÑ °³ÀÇ ÇÔ¼ö¸¦ Á¤ÀÇÇØ¾ß¸¸ ÇÑ´Ù.

¶óÀ̺귯¸® ÇÔ¼ö printf ( 7.9Àý [Formatted Output] 70 ÆäÀÌÁö ÂüÁ¶.)´Â °¡º¯Àμö°¡ À¯¿ëÇÏ°Ô ¾²ÀÌ ´Â ´Ù¸¥ ºÎ·ùÀÇ ÇÔ¼ö¿¡ ´ëÇÑ ¿¹Á¦°¡ µÈ´Ù. ÀÌ ÇÔ¼ö´Â ±ÔÁ¤µÈ ÅÛÇø®Æ® ¹®ÀÚ¿­ÀÇ Á¦¾îÇÏ¿¡ Àμöµé( °³¼ö»Ó¸¸ ¾Æ´Ï¶ó ´Ù¾çÇÑ ÇüÀ» °¡Áú ¼ö ÀÖ´Ù)À» ÇÁ¸°Æ®ÇÑ´Ù. °¡º¯ÀÎÀÚ ÇÔ¼ö´Â ¸¹Àº ÀμöµéÀ» ó¸® ÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ °¡º¯Àμö ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ÀÌÀ¯°¡ µÈ´Ù.

open°ú °°Àº ÇÔ¼öµéÀº °íÁ¤µÈ °³¼öÀÇ ÀμöµéÀ» ÃëÇÏÁö¸¸, ¶§¶§·Î ¸¶Áö¸· ¸î°³´Â ¹«½ÃµÈ´Ù. ANSI C ´Â ±× ÇÔ¼ö¸¦ °¡º¯À¸·Î Á¤ÀÇÇϵµ·Ï ¿ä±¸ÇÏÁö¸¸; GNU C ÄÄÆÄÀÏ·¯¿Í ´ëºÎºÐ ´Ù¸¥ C ÄÄÆÄÀÏ ·¯µéÀ» °íÁ¤µÈ Àμö¸¦ ÃëÇÏ´Â ÇÔ¼öó·³ Á¤ÀÇÇϵµ·Ï Çã¿ëÇÏ°í ¼±¾ðÇÒ¶§¸¸ °¡º¯À¸·Î½á ±× ÇÔ¼ö¸¦ ¼± ¾ðÇÑ´Ù (¶Ç´Â ±× ÀμöµéÀ» ÀüÇô ¼±¾ðÇÏÁö ¾Ê´Â´Ù. ).

A.2.2 ¾î¶»°Ô °¡º¯ÀÎÀÚ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ°í »ç¿ëÇϴ°¡?

°¡º¯ÀÎÀÚ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ°í »ç¿ëÇÏ´Â ¼¼°¡Áö ´Ü°èÀÌ´Ù.

둁 Àμö¸®½ºÆ®¾È¿¡ »ý·«Ç¥½Ã (`. . .')À» »ç¿ëÇϰí, °¡º¯ ÀμöµéÀ» ¾ï¼¼½ºÇϵµ·Ï Ưº°ÇÑ ¸ÅÅ©·ÎµéÀ» »ç ¿ëÇÏ¿©¼­, °¡º¯Àμö ÇÔ¼ö¸¦ Á¤ÀÇÇ϶ó. A.2.2.2Àý [Receving Arguments] 383 ÆäÀÌÁö ÂüÁ¶.

둁 ±×°ÍÀ» È£ÃâÇÏ´Â ¸ðµç ÆÄÀÏ¿¡¼­, »ý·«Ç¥½Ã (`. . .')¿Í ÇÔ²² ÇÁ·ÎÅäŸÀÔÀ» »ç¿ëÇØ¼­ °¡º¯À¸·Î½á ÇÔ ¼ö¸¦ ¼±¾ðÇ϶ó. A.2.2.1Àý [Varidic Prototypes] 382 ÆäÀÌÁö ÂüÁ¶.

둁 °íÁ¤µÈ ÀμöµéµÚ¿¡ °¡º¯ÀμöµéÀÌ µÚ¿¡ ³ª¿Àµµ·Ï ÇØ¼­ ÇÔ¼ö¸¦ È£ÃâÇ϶ó. A.2.2.4 [Calling Variadics] 384 ÆäÀÌÁö ÂüÁ¶.

A.2.2.1 °¡º¯ ÀμöµéÀ» À§ÇÑ ±¸¹®

°¡º¯ Àμö¸¦ ¹Þ¾ÆµéÀÌ´Â ÇÔ¼ö´Â ¿Ã¹Ù¸¥ ÇÁ·ÎÅäŸÀÔÀ¸·Î ¼±¾ðµÇ¾î¾ß¸¸ ÇÑ´Ù. ´ç½ÅÀº º¸Åë °íÁ¤µÈ ÀÎ ¼öµéÀ» »ç¿ëÇÏ°í °¡º¯ÀμöµéÀÇ °¡´É¼ºÀ» ÁöÀûÇϱâ À§Çؼ­ `. . .'À» ÃëÇÑ´Ù. ANSI C ±¸¹®Àº `. . .' °¡ ³ª¿À±â Àü¿¡ Àû¾îµµ ÇÑ °³ÀÇ °íÁ¤ Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ¿¹¸¦µé¾î,

int

func (const char *a, int b, . . .)

{

. . .

}

°íÁ¤µÈ µÎ °³ÀÇ Àμö·Î½á, const char * ¿Í int Àμö¸¦ ÃëÇϰí intÇüÀÇ °ªÀ» ¸®ÅÏÇÏ´Â func ÇÔ¼öÀÇ Á¤ ÀÇÀÌ´Ù. ±× µÎ °³ÀÇ °íÁ¤Àμö ´ÙÀ½¿¡ ¾Ë·ÁÁöÁö ¾ÊÀº ÀμöµéÀÌ ¸î °³°¡ µû¸£°Ô µÈ´Ù.

À̽ļº ³ëÆ® : ¾î¶² C ÄÄÆÄÀÏ·¯¿¡¼­, ÇÔ¼ö Á¤ÀÇ¿¡¼­ °¡º¯Àμö´Â ÇüÀ» ¼±¾ðÇÏ¿© µî·ÏµÉ ¼ö ¾ø´Ù. Á»´õ ÀÚ¼¼È÷ ¸»Çϸé, ÀÌ ÀμöµéÀÇ Å¸ÀÔÀº ÀÚü-ÁøÇà(self-promoting)ÀÌ µÇ¾î¾ß¸¸ ÇÑ´Ù: Áï, µðÆúÆ® ÁøÇàÀº ±× ŸÀÔµéÀ» º¯°æÇÏÁö ¾Ê¾Æ¾ßÇÑ´Ù. À̰ÍÀº, float , char(ºÎÈ£°¡ ÀÖ´øÁö ¾ø´øÁö), ±×¸®°í short int (ºÎÈ£°¡ Àְųª ¾ø°Å³ª) »Ó¸¸¾Æ´Ï¶ó ¹è¿­°ú ÇÔ¼öµéÀÇ Å¸ÀÔÀ» ¹«½ÃÇÑ´Ù.

A.2.2.2 Àμö °ªµéÀ» ¹Þ±â

º¸Åë °íÁ¤µÈ ÀμöµéÀº °³º°ÀûÀÎ À̸§À» °®°í, ´ç½ÅÀº ±×µéÀÇ °ªÀ» ¾ï¼¼½ºÇϱâ À§Çؼ­ ±×µéÀÇ À̸§ À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª °¡º¯ ÀμöµéÀº ¾Æ¹«·± À̸§À» °®Áö¾Ê´Â´Ù. ¾î¶»°Ô ´ç½ÅÀÌ ±×µéÀ» ¾ï¼¼ ½º ÇÒ°ÍÀΰ¡? ±×µéÀ» ¾ï¼¼½ºÇϱâ À§ÇÑ À¯ÀÏÇÑ ¹æ¹ýÀº ±×µéÀÌ ±â·ÏµÈ ¼ø¼­´ë·Î, ¼øÂ÷ÀûÀ¸·Î ¿ª¼¼½ºÇÏ °í ´ÙÀ½ ¼¼°¡Áö ´Ü°è¿¡¼­ ÀÖ´Â Çì´õÆÄÀÏ `stdarg.h'¿¡ ¼±¾ðµÈ Ưº°ÇÑ ¸ÅÅ©·ÎµéÀ» »ç¿ëÇØ¾ß¸¸ ÇÑ´Ù.

1. va_start¸¦ »ç¿ëÇØ¼­ va_list ÇüÀÇ Æ÷ÀÎÅÍ º¯¼ö¸¦ Àμö·Î½á ÃʱâÈ­ ÇÑ´Ù. ÃʱâÈ­µÈ Àμö Æ÷ÀÎÅÍ ´Â ù ¹øÂ° °¡º¯Àμö¸¦ °¡¸®Å²´Ù.

2. va_arg¸¦ È£ÃâÇÔÀ¸·Î½á °¡º¯ÀμöµéÀ» ¾ï¼¼½ºÇÑ´Ù. va_arg¸¦ ù ¹øÂ° È£ÃâÇϸé, ù ¹øÂ° Àμö¸¦ ¸®ÅÏÇÏ°Ô µÇ°í, ´ÙÀ½ È£ÃâÀº µÎ ¹øÂ° Àμö¸¦ ¸®ÅÏÇϰí... ±×·¸°Ô ÁøÇàÀÌ µÈ´Ù.

´ç½ÅÀÌ ¸¸ÀÏ ³²°ÜÁø °¡º¯Àμö¸¦ ¹«½ÃÇϱ⸦ ¿øÇÑ´Ù¸é ¾ðÁ¦µçÁö ¸ØÃâ ¼ö ÀÖ´Ù. È£Ãâ·Î °ø±ÞµÈ Àμö µéº¸´Ù´Â ¼Ò¼öÀÇ ÀμöµéÀ» ¾ï¼¼½ºÇÏ´Â ÇÔ¼ö¸¦ À§Çؼ­ ¾ÆÁÖ ÁÁÁö¸¸, ¸¸ÀÏ ´ç½ÅÀÌ ³Ê¹« ¸¹Àº ÀμöµéÀ» ¾ï¼¼½ºÇÏ·Á ½Ãµµ ÇÑ´Ù¸é ´ç½ÅÀº ¾²·¹±â °ªÀ» ¾ò°Ô µÉ °ÍÀÌ´Ù.

3. va_end¸¦ È£ÃâÇØ¼­ Æ÷ÀÎÅÍ º¯¼öÀÎ Àμö¸¦ ³¡³ÂÀ½À» ¾Ë·Á¶ó.

(½ÇÁ¦·Î, ´ëºÎºÐ C ÄÄÆÄÀÏ·¯¿¡¼­, va_endÀÇ È£ÃâÀº ¾Æ¹«Àϵµ ÇÏÁö¾Ê°í ´ç½ÅÀº ±×°ÍÀ» ½ÇÁ¦·Î È£ÃâÇÒ Çʿ䰡 ¾ø´Ù. À̰ÍÀº GNU C ÄÄÆÄÀÏ·¯¿¡¼­´Â Ç×»ó ÂüÀÌ´Ù. ±×·¯³ª ´©±º°¡ ´ç½ÅÀÇ ÇÁ·Î±×·¥À» µ¶ ƯÇÑ ÄÄÆÄÀÏ·¯¿¡¼­ ÄÄÆÄÀÏÇÏ´Â °æ¿ì¶ó¸é va_end¸¦ È£ÃâÇØ¾ß¸¸ ÇÒ °ÍÀÌ´Ù.

va_start, va_arg ±×¸®°í va_end¿¡ ´ëÇÑ ¿ÏÀüÇÑ Á¤ÀÇ´Â A.2.2.5Àý [Argument Macros] 384 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. ´Ü°è 1°ú 3Àº °¡º¯ Àμö¸¦ ¹Þ¾ÆµéÀÌ´Â ÇÔ¼ö¿¡¼­ ¹Ýµå½Ã ¼öÇàµÇ¾î¾ß¸¸ ÇÑ´Ù. ±×·¸Áö¸¸, ´ç ½ÅÀº ´Ù¸¥ ÇÔ¼ö¿¡ Àμö·Î½á va_list º¯¼ö¸¦ ÁÙ ¼ö ÀÖ°í ÀüºÎ ¶Ç´Â ´Ü°è 2¸¦ ¼öÇàÇÒ ¼ö ÀÖ´Ù.

´ç½ÅÀº ´ÜÀÏÇÑ ÇÔ¼ö È£Ãâ¿¡¼­ ¿©·¯¹ø ¼¼ ´Ü°èÀÇ ÀüºÎ¸¦ ¹Ýº¹Çؼ­ ¼öÇà ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ °¡º¯ Àμö¸¦ ¹«½ÃÇϱ⸦ ¿øÇÑ´Ù¸é, ¼¼´Ü°è¸¦ ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¿øÇÑ´Ù¸é Æ÷ÀÎÅÍ º¯¼ö ÀÎ ÇÑ °³ÀÇ Àμöº¸´Ù ´õ ¸¹Àº °ÍÀ» °¡Áú ¼ö ÀÖ´Ù. ´ç½ÅÀº ´ç½ÅÀÌ ¿øÇÒ ¶§ va_start·Î °¢ º¯¼ö¸¦ ÃÊ ±âÈ­ ÇÒ ¼ö ÀÖ°í, ±×·¯°í ³ª¸é ´ç½ÅÀÌ ¿øÇÏ´Â °¢°¢ÀÇ Æ÷ÀÎÅÍ Àμö¸¦ ÃßÃâÇÒ ¼ö ÀÖ´Ù. °¢ Æ÷ÀÎÅÍ º¯ ¼öÀÎ Àμö´Â Àμö °ªµéÀÇ °°Àº ÁýÇÕÀ» ÅëÇØ¼­ ÁøÇàµÇÁö¸¸, ±×°ÍÀº ÀڽŸ¸ÀÇ ÆäÀ̽º(pace)¸¦ °®´Â´Ù.

À̽ļº ³ëÆ®: ¾î¶² ÄÄÆÄÀÏ·¯·Î, ´ç½ÅÀÌ ¼­ºê·çƾ(subroutine)¿¡ Àμö·Î½á Æ÷ÀÎÅÍ º¯¼ö¸¦ »ç¿ëÇÑ´Ù ¸é, ´ç½ÅÀº ¼­ºê·çƾÀÌ ¸®ÅÏÇÑ ÈÄ¿¡ °°Àº Æ÷ÀÎÅÍ º¯¼öÀÎ Àμö¸¦ »ç¿ëÇØ¼­ ±â·ÏÇÏÁö ¾Ê¾Æ¾ß¸¸ ÇÑ´Ù. ¿Ïº®ÇÑ À̽ļºÀ» À§Çؼ­, ´ç½ÅÀº va_end¿¡ ±×°ÍÀ» ÁÖ¾î¾ßÇÑ´Ù. À̰ÍÀº ½ÇÁ¦·Î ANSI CÀÇ ±ÇÀå»çÇ× ÀÌÁö¸¸, ´ëºÎºÐ ANSI C ÄÄÆÄÀÏ·¯´Â ´ÙÇàÀÌ »ó°ü¾øÀÌ ÀÛ¾÷ÇÑ´Ù.

A.2.2.3 ¾î¶»°Ô ¸¹Àº ÀμöµéÀÌ °ø±ÞµÇ´Â°¡?

°¡º¯ ÀμöµéÀÇ Å¸ÀÔ°ú °³¼ö¸¦ ¾Ë ¼ö ÀÖ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀº ¾ø´Ù. ±×·¡¼­ ´©±¸µç ±× °¡º¯Àμö°¡ ¾ó ¸¶³ª ¸¹Àº ÀμöµéÀ» °¡Á³°í, ±×°ÍÀÌ ¹«½¼ Á¾·ùÀÎÁö¸¦ ¾Ë¾Æ³¾ ¼ö Àִ Ưº°ÇÑ ¹æ¹ýÀÇ ÇÔ¼ö¸¦ °í¾ÈÇØ ¾ßÇÑ´Ù. ±×°ÍÀº °¡º¯Àμö ÇÔ¼öÀÇ È£Ãâ °ü½À¿¡ Àû´çÇÏ°Ô Á¤ÀǵǾî¾ß Çϰí, ±×°Í¿¡ ±Ù°ÅÇÏ¿© ÇÁ·Î±×·¥ ¿¡¼­ °¡º¯ Àμö ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

È£Ãâ°ü½ÀÀÇ ÇѰ¡Áö´Â ÇÑ °³ÀÇ °íÁ¤µÈ Àμö¸¦ »ç¿ëÇØ¼­ °¡º¯ÀμöÀÇ °³¼ö¸¦ °ø±ÞÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ ¹ýÀº °ø±ÞµÈ °¡º¯ ÀμöµéÀÌ ¸ðµÎ °°Àº ÇüÀÏ °æ¿ì¿¡ °¡´ÉÇÑ ¹æ¹ýÀÌ´Ù. ±×¿Í À¯»çÇÑ ¹æ¹ýÀ¸·Î´Â °¡º¯ Àμö°¡ °ø±ÞµÉ °¡´É¼º¿¡ ´ëÇÑ Á¤º¸¸¦ ÇÑ ºñÆ®¿¡ ´ãÀº, ºñÆ® ¸¶½ºÅ©°¡µÉ °íÁ¤Àμö¸¦ ÀμöÁß¿¡ Çϳª·Î °®´Â °ÍÀÌ´Ù. ´ç½ÅÀº ¹Ì¸® ¼±¾ðµÈ ½ÃÄö½º¾È¿¡ ÀÖ´Â ºñÆ®µéÀ» Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù; ¸¸ÀÏ ±× ºñÆ®°¡ ¼³ Á¤µÇ¸é,´ÙÀ½ ÀμöÀÇ °ªÀ» ÃßÃâÇϴ°ÍÀ̰í, ±×·¸Áö¾Ê´Ù¸é, µðÆúÆ®°ªÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. °íÁ¤µÈ Àμö´Â °¡º¯ ÀμöµéÀÇ °³¼ö¿Í ŸÀÔ, À̵ÑÀ» ÁöÁ¤ÇÏ´Â ÆÐÅÏÀ¸·Î½á »ç¿ëµÉ ¼ö ÀÖ´Ù. printf¿¡¼­ Çü½ÄÈ­µÈ ¹®ÀÚ ¿­ Àμö´Â À̰ÍÀÇ ÇÑ ¿¹°¡µÈ´Ù. (7.9.7Àý [Formatted Output Functions] 76 ÆäÀÌÁö ÂüÁ¶.

´Ù¸¥ °¡´É¼ºÀº ¸¶Áö¸· °¡º¯ Àμö·Î½á "³¡ Ç¥½Ã"°ªÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦µé¾î, ¿¹ÃøÇÒ ¼ö ¾ø´Â Æ÷ÀÎÅÍ ÀμöµéÀÇ °³¼ö¸¦ ó¸®ÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Ù¸é, ³Î Æ÷ÀÎÅÍ´Â Àμö ¸®½ºÆ®ÀÇ ³¡À» ÁöÀûÇÒ °ÍÀÌ´Ù. (À̰ÍÀº ³Î Æ÷ÀÎÅͰ¡ ÇÔ¼ö¿¡°Ô ÀǹÌÀÖ´Â °ªÀÌ ¾Æ´Ï¶ó°í °¡Á¤ÇÑ´Ù.) execl ÇÔ¼ö´Â ÀÌ ¹æ¹ýÀ¸·Î ÀÛ¾÷ ÇÑ´Ù; 23.5Àý [Executing a File] 327 ÆäÀÌÁö ÂüÁ¶.

A.2.2.4 °¡º¯Àμö ÇÔ¼öµéÀ» È£ÃâÇϱâ.

´ç½ÅÀÌ °¡º¯Àμö ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ƯÁ¤ÇÑ ¾î¶² °ÍÀ» ½á¼­´Â ¾ÈµÈ´Ù. ´ÜÁö °ýÈ£¾È¿¡ º¸Åë, ÄÞ¸¶¿¡ ÀÇÇØ ºÐ¸®µÈ Àμöµé(°¡º¯À¸·Î½á, ¿äûµÈ Àμö)¸¸ »ç¿ëÇ϶ó. ±×·¯³ª ´ç½ÅÀº ÇÁ·ÎÅäŸÀÔÀ¸·Î ±× ÇÔ¼ö ¸¦ ¼±¾ðÇÔÀ¸·Î½á ÁغñÇϰí, ±× ÀμöÀÇ °ªµéÀÌ ¾î¶»°Ô º¯È¯µÇ´ÂÁö¸¦ ¾Ë¾Æ¾ß¸¸ ÇÑ´Ù.

¿øÄ¢ÀûÀ¸·Î, °¡º¯À¸·Î½á Á¤ÀÇµÈ ÇÔ¼öµéÀº ´ç½ÅÀÌ ±×µéÀ» È£ÃâÇÒ¶§¸¶´Ù ÇÔ¼ö ÇÁ·ÎÅäŸÀÔÀ» »ç¿ëÇØ¼­ °¡º¯ÀÌ µÇµµ·Ï ¼±¾ðµÇ¾î¾ßÇÑ´Ù. (A.2.2.1 [Variadic Prototypes] 382 ÆäÀÌÁö ÂüÁ¶.) À̰ÍÀº ÇÔ¼ö°¡ °¡ º¯ Àμö ¶Ç´Â °íÁ¤µÈ Àμö¸¦ ÃëÇÏ´ÂÁöÀÇ ¿©ºÎ¿¡ ÀÇÁ¸ÇÏ¿© ÇÔ¼ö¿¡ Àμö°ªµéÀ» ºÎ¿©ÇÏ´Â ´Ù¸¥ È£Ãâ °ü½ÀÀ» °¡Áø C ÄÄÆÄÀÏ·¯ ¶§¹®ÀÌ´Ù.

½ÇÁ¦·Î, GNU C ÄÄÆÄÀÏ·¯´Â Ç×»ó ´ç½ÅÀÌ °¡º¯Àμö ¶Ç´Â ¿äûµÈ Àμö¸¦ »ç¿ëÇÏ´ÂÁö¿¡ »ó°ü¾øÀÌ °° Àº ¹æ¹ýÀ¸·Î ÀμöÇüÀÇ ÁÖ¾îÁø ÁýÇÕÀ» ºÎ¿©ÇÑ´Ù. ±×·¡¼­, ÀμöµéÀÇ Å¸ÀÔÀÌ ÀÚü-ÁøÇàÀÎ µ¿¾È, ´ç½ÅÀº ±×µéÀÇ ¼±¾ðÀ» ¾ÈÀüÇÏ°Ô »ý·«ÇÒ ¼ö ÀÖ´Ù. º¸Åë °¡º¯ÇÔ¼ö¸¦ À§Çؼ­ ÀμöÀÇ ÇüÀ» ¼±¾ðÇÏ´Â °ÍÀº ÁÁÀº ¹æ¹ýÀ̰í, ¸ðµç ÇÔ¼öµéÀ» À§Çؼ­´Â ¹°·Ð ´ç¿¬ÇÑ °ÍÀÌ´Ù. ±×·±µ¥ ¸î °³ÀÇ ÇÔ¼ö´Â ±×·¸Áö ¾ÊÀº °æ¿ì°¡ ÀÖ´Ù_¿¹¸¦µé¾î, open°ú printf

ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔÀÌ °¡º¯ÀμöµéÀÇ Å¸ÀÔÀ» Á¤ÇÏÁö ¾Ê¾ÒÀ» ¶§, °¡º¯Àμö ÇÔ¼ö¸¦ È£ÃâÇϸé, ÇÔ¼öÀÇ °¡ º¯Àμö°ªµéÀº µðÆúÆ® Àμö ½Â±ÞÀÌ ¼öÇàµÈ´Ù. µðÆúÆ® Àμö ½Â±ÞÀ̶õ char ¶Ç´Â short int (ºÎÈ£°¡ ÀÖ ´øÁö ¾ø´øÁö)ÀÇ ÇüÀ» °¡Áø ¿ÀºêÁ§Æ®µéÀº int ³ª unisgned int·Î ½Â±ÞµÇ°í; floatÀÇ ÇüÀ» °¡Áø ¿ÀºêÁ§ Æ®µéÀº double·Î ½Â±ÞµÇ´Â °ÍÀ» ¸»ÇÑ´Ù. ±×·¡¼­, °¡º¯Àμö¿¡ charÇüÀÇ °ªÀ» ³ÖÀ¸¸é, ±×°ÍÀº int·Î ½Â ±ÞµÇ°í, ±× ÇÔ¼ö´Â va_arg(ap, int)°ú ÇÔ²² ±×°ÍÀ» ¾òÀ» °ÍÀÌ´Ù.

°íÁ¤ ÀμöµéÀº º¸Åë ÇÔ¼öÀÇ ¿øÇüÀ» ÅëÇØ¼­ Á¦¾îµÈ´Ù: Àμö Ç¥Çö½ÄÀº ¸¶Ä¡ ±×ÇüÀÇ º¯¼ö·Î ÇÒ´çµÇ¾ú ´ø °Í ó·³ ¼±¾ðµÈ ÀμöÀÇ ÇüÀ¸·Î º¯È¯µÈ´Ù.

A.2.2.5 Àμö ¾ï¼¼½º ¸ÅÅ©·Îµé.

´ÙÀ½Àº °¡º¯ ÀμöµéÀ» °¡Á®¿À±â À§Çؼ­ »ç¿ëµÇ´Â ¸ÅÅ©·Î¿¡ ´ëÇÑ ±â¼úÀÌ´Ù. ±× ¸ÅÅ©·ÎµéÀº Çì´õÆÄÀÏ `stdarg.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.

µ¥ÀÌÅÍ Å¸ÀÔ : va__list

va_list´Â Æ÷ÀÎÅÍ º¯¼öµéÀÎ Àμö¸¦ À§Çؼ­ »ç¿ëµÈ´Ù.

¸ÅÅ©·Î : void va__start (va_list ap, last_required)

ÀÌ ¸ÅÅ©·Î´Â ÇöÀç ÇÔ¼öÀÇ °¡º¯ ÀμöµéÀÇ Ã¹ ¹øÂ°¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ º¯¼ö ap¸¦ ÃʱâÈ­ÇÑ´Ù; lastrequired´Â ÇÔ¼ö¿¡ ÀÖ´Â ¸¶Áö¸· °íÁ¤Àμö°¡ µÇ¾î¾ß ÇÑ´Ù. `varargs.h'¿¡ ÀÖ´Â va_startÀÇ Á¤ÀǸ¦ º¯°æÇÏ·Á¸é A.2.3.1 [Old Varargs] 386 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó.

¸ÅÅ©·Î : type va__arg (va_list ap, type)

va_arg ¸ÅÅ©·Î´Â ´ÙÀ½ °¡º¯ ÀμöÀÇ °ªÀ» ¸®ÅÏÇϰí, ´ÙÀ½ Àμö¸¦ °¡¸®Å°µµ·Ï apÀÇ °ªÀ» °»½ÅÇÑ´Ù. ±× ·¡¼­, va_argÀÇ ¼º°øÀûÀÎ »ç¿ëÀº °¡º¯ ÀμöµéÀ» ¼º°øÀûÀ¸·Î ¸®ÅÏÇÑ´Ù. va_arg¿¡ ÀÇÇØ ¸®ÅÏµÈ °ªÀÇ Å¸ÀÔÀº È£Ãâ¿¡¼­ Á¤Çß´ø ŸÀÔÀÌ´Ù. typeÀº ¹Ýµå½Ã ½ÇÁ¦ ÀμöÀÇ Å¸ÀÔ°ú ¸ÅÄ¡µÇ´Â ÀÚü-½Â±Þ ŸÀÔ (char³ª short int ³ª float°¡ ¾Æ´Ñ)ÀÌ µÇ¾î¾ß ÇÑ´Ù.

¸ÅÅ©·Î : void va__end (va_list ap)

À̰ÍÀº apÀÇ »ç¿ëÀ» ³¡³½´Ù. va_end È£ÃâÈÄ¿¡, ´ÙÀ½¿¡ °°Àº ap¸¦ »ç¿ëÇØ¼­ va_arg¸¦ È£ÃâÇϸé ÀÛ¾÷ ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ç½ÅÀº °°Àº ap Àμö¸¦ »ç¿ëÇÏ´Â va_start¸¦ È£ÃâÇß´ø ÇÔ¼ö¸¦ ¸®ÅÏÇϱâÀü¿¡ va_end¸¦ È£ÃâÇØ¾ß¸¸ ÇÑ´Ù. GNU C ¶óÀ̺귯¸®¿¡¼­, va_end´Â ¾Æ¹«Àϵµ ÇÏÁö¾Ê±â ¶§¹®¿¡ À̽ļºÀÇ ÀÌÀ¯°¡ ¾Æ´Ï¶ó¸é va_end¸¦ È£ÃâÇÒ Çʿ䰡 ¾ø´Ù.

A.2.3 °¡º¯Àμö ÇÔ¼öÀÇ ¿¹Á¦.

´ÙÀ½Àº ÀμöµéÀ» °¡º¯ÀûÀÎ °³¼ö·Î ¹Þ¾ÆµéÀÌ´Â ÇÔ¼ö¿¡ ´ëÇÑ ¿¹ÀÌ´Ù. ÇÔ¼öÀÇ Ã¹ ¹øÂ° Àμö´Â ¸®ÅÏµÈ °á°ú¿Í ÇÕ»êµÈ, ³²°ÜÁø ÀμöµéÀÇ °³¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â °¡º¯ Àμö ±â´ÉÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ¼³¸íÇÏ´Â µ¥ ÃæºÐÇÏ´Ù.

#include <stdarg.h>

#include <stdio.h>

int

add_em_up (int count,...)

{

va_list ap;

int i, sum;

va_start (ap, count);

/* Àμö ¸ñ·ÏÀ» ÃʱâÈ­Ç϶ó. */

sum = 0;

for (i = 0; i < count; i++)

sum += va_arg (ap, int);

/* ´ÙÀ½ Àμö°ªÀ» ¾ò¾î¶ó. */

va_end (ap);

/* Á¤¸®Ç϶ó. */

return sum;

}

int

main (void)

{

/* ÀÌ È£ÃâÀº 16À» Ãâ·ÂÇÑ´Ù. */

printf ("%d\n", add_em_up (3, 5, 5, 6));

/* ÀÌ È£ÃâÀº 55¸¦ Ãâ·ÂÇÑ´Ù. */

printf ("%d\n", add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

return 0;

}

A.2.3.1 ¿À·¡µÈ-ÇüÅÂÀÇ °¡º¯Àμö ÇÔ¼öµé.

ANSI C ÀÌÀü¿¡, ÇÁ·Î±×·¡¸ÓµéÀº °¡º¯ÇÔ¼öµéÀ» ¾²±âÀ§Çؼ­ ¿ÏÀüÈ÷ ´Ù¸¥ ±â´ÉÀ» »ç¿ëÇß¾ú´Ù. GNU C ÄÄÆÄÀÏ·¯´Â ¿©ÀüÈ÷ ±×°ÍÀ» Áö¿øÇÑ´Ù; ÇöÀç, ±×°ÍÀº ANSI C°¡ ¿©ÀüÈ÷ ÀϹÝÀûÀÌÁö ¾Ê±â ¶§¹®¿¡, ANSI C ±â´Éº¸´Ù´Â ´õ À̽ļºÀÌ ÀÖ´Ù. ¿À·¡µÈ-ÇüÅÂÀÇ °¡º¯Àμö ÇÔ¼ö¸¦ Á¤ÀÇÇϰí ÀÖ´Â Çì´õÆÄÀÏÀº `varargs.h'¶ó°í ºÒ¸°´Ù.

`varargs.h'¸¦ »ç¿ëÇÏ´Â °ÍÀº `stdarg.h'¸¦ »ç¿ëÇϴ°Ͱú °ÅÀÇ °°´Ù. °¡º¯Àμö ÇÔ¼ö¸¦ ¾î¶»°Ô È£Ãâ ÇÏ´ÂÁö¿¡ ´ëÇÑ °ÍÀº °ÅÀÇ ´Ù¸§ÀÌ ¾ø´Ù; A.2.2.4Àý [Calling Variadics] 384 ÆäÀÌÁö ÂüÁ¶. ¿ÀÁ÷ À¯ÀÏ ÇÑ Â÷ÀÌ´Â ±×µéÀ» Á¤ÀÇÇÏ´Â ¹æ¹ýÀÌ´Ù. ¹«¾ùº¸´Ùµµ, ´ç½ÅÀº ¿À·¡µÈ ÇüÅÂÀÇ ºñ- ÇÁ·ÎÅäŸÀÔ ±¸¹®À» »ç¿ëÇØ¾ß¸¸ ÇÑ´Ù. ´ÙÀ½Ã³·³:

tree

build (va_alist)

va_dcl

{

µÎ ¹øÂ°·Î, va_start¿¡ ¿ÀÁ÷ ÇÑ °³ÀÇ Àμö¸¸À» ³Ö¾î¾ßÇÑ´Ù. ´ÙÀ½Ã³·³:

va_list p;

va_start (p);

¿À·¡µÈ ÇüÅÂÀÇ °¡º¯Àμö ÇÔ¼öµéÀ» Á¤ÀÇÇϱâ À§Çؼ­´Â ƯÁ¤ÇÑ ¸ÅÅ©·Î°¡ »ç¿ëµÈ´Ù:

¸ÅÅ©·Î : va__alist

ÀÌ ¸ÅÅ©·Î´Â °¡º¯Àμö ÇÔ¼ö¿¡ ÀÖ´Â °íÁ¤ ÀμöÀ̸§ ¸ñ·ÏÀ» ³ªÅ¸³½´Ù.

¸ÅÅ©·Î : va__decl

ÀÌ ¸ÅÅ©·Î´Â °¡º¯Àμö ÇÔ¼ö¸¦ À§ÇÑ ÀμöµéÀ̳ª ¶Ç´Â ¾Ï¹¬ÀûÀÎ Àμö¸¦ ¼±¾ðÇÑ´Ù.

¸ÅÅ©·Î : void va__start (va_list ap)

`varargs.h'¿¡ ¼±¾ðµÈ ÀÌ ¸ÅÅ©·Î´Â ÇöÀç ÇÔ¼öÀÇ Ã¹ ¹øÂ° Àμö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ·Î Æ÷ÀÎÅÍ º¯¼öÀÎ Àμö¸¦ ÃʱâÈ­ÇÑ´Ù.

´Ù¸¥ Àμö ¸ÅÅ©·Î, va_arg ¿Í va_end´Â `varargs.h' ¿Í `stdarg.h'ÀÇ °ÍÀÌ ¼­·Î °°´Ù; A.2.2.5Àý [Argument Macros] 384 ÆäÀÌÁö ÂüÁ¶. µ¿ÀÏÇÑ ÄÄÆÄÀÏ ´ÜÀ§¿¡¼­ `varargs.h'¿Í `stdarg.h'°¡ µÑ´Ù ÀÎŬ ·çµåµÇ¾î¼­´Â ¾ÈµÈ´Ù; va_start°¡ ¼­·Î Ãæµ¹ÇÏ°Ô µÈ´Ù.

A.3 ³Î Æ÷ÀÎÅÍ »ó¼ö

³Î Æ÷ÀÎÅÍ »ó¼ö´Â ¾î´À ½ÇÁ¦ ¿ÀºêÁ§Æ®¸¦ °¡¸®Å°°í ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¸»ÇÑ´Ù. ´ç½ÅÀº void * ÇüÀ» °¡Áø Æ÷ÀÎÅÍ º¯¼ö·Î ±×°ÍÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù. ³Î Æ÷ÀÎÅÍ »ó¼ö¸¦ »ç¿ëÇϱâ À§ÇÑ ÁÁÀº ¹æ¹ýÀº NULLÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

¸ÅÅ©·Î : void * NULL

À̰ÍÀº ³Î Æ÷ÀÎÅÍ »ó¼öÀÌ´Ù.

³Î Æ÷ÀÎÅÍ »ó¼ö·Î½á 0 ¶Ç´Â (void *)0À» »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, NULLÀ» »ç¿ëÇÏ´Â °ÍÀÌ »ó¼ö¸¦ »ç¿ëÇÏ ´Â ¸ñÀûÀ¸·Î Á»´õ ºÐ¸íÇÏ°Ô ¸¸µé¾îÁ³±â ¶§¹®¿¡ ´õ ±ú²ýÇÏ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÇÔ¼ö Àμö·Î½á ³Î Æ÷ÀÎÅÍ »ó¼ö¸¦ »ç¿ëÇÑ´Ù¸é, ±× ÇÔ¼ö°¡ °¡Áø ÇÁ·ÎÅäŸÀÔ ¼±¾ð°ú ¿ÏÀüÈ÷ ¸Âµµ·Ï ³Î Æ÷ÀÎÅÍ »ó¼ö¸¦ »ç¿ëÇØ¾ßÇÑ ´Ù. ±×·¸Áö ¾Ê´Ù¸é, ¸¸ÀÏ ¸ñÇ¥ ¸Ó½®(machin)ÀÌ µÎ °³ÀÇ ´Ù¸¥ Æ÷ÀÎÅÍ Ç¥ÇöÀ» °¡Áø´Ù¸é, ÄÄÆÄÀÏ·¯´Â ±× Àμö¸¦ À§ÇØ »ç¿ëÇÒ Ç¥ÇöÀÌ ¹«¾ùÀÎÁö ¾ËÁö ¸øÇÑ´Ù.

´ç½ÅÀº Àû´çÇÑ Æ÷ÀÎÅÍ Å¸ÀÔÀ¸·Î »ó¼ö¸¦ ij½ºÆ®(cast)ÇÔÀ¸·Î½á ±× ¹®Á¦¸¦ ÇÇÇÒ ¼ö ÀÖÁö¸¸, ¿ì¸®´Â ±× º¸´Ù´Â ´ç½ÅÀÌ È£ÃâÇÒ ÇÔ¼ö¸¦ À§Çؼ­ ÇÁ·ÎÅäŸÀÔ¿¡ ´õÇÒ °ÍÀ» ±ÇÀåÇÑ´Ù.

A.4 Áß¿äÇÑ µ¥ÀÌÅÍ Å¸ÀÔµé.

C¿¡¼­ µÎ °³ÀÇ Æ÷ÀÎÅ͸¦ »« °á°ú´Â Ç×»ó Á¤¼öÀÌÁö¸¸, Á¤¹ÐÇÑ Å×ÀÌŸ ŸÀÔÀº C ÄÄÆÄÀÏ·¯¿¡ µû¶ó ´Ù¸£´Ù.. ±×ó·³ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ µû¶ó¼­, sizeofÀÇ °á°ú ¶ÇÇÑ ÄÄÆÄÀÏ·¯¿¡ µû¶ó¼­ ´Ù¸£´Ù. ANSI ´Â ±× µÎ °³ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» À§Çؼ­ Ç¥ÁØ À̸§À» Á¤ÀÇÇϱ⠶§¹®¿¡, ´ç½ÅÀº À̽ļºÀ» À§Çؼ­ ±× µ¥ÀÌÅÍ Å¸ÀÔÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×µéÀº Çì´õÆÄÀÏ `stddef.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.

µ¥ÀÌÅÍ Å¸ÀÔ : ptrdiff__t

À̰ÍÀº µÎ °³ Æ÷ÀÎÅ͸¦ »©¼­ ³ª¿Â °á°úÀÇ ºÎȣȭµÈ Á¤¼ö ŸÀÔÀÌ´Ù. ¿¹¸¦µé¾î, char *p1, *p2; ÀÌ·¸°Ô ¼±¾ðµÇ¾ú´Ù¸é; Ç¥Çö½Ä p2 - p1Àº ptrdiff_t ÇüÀÇ °á°ú°ªÀ» °®´Â´Ù. À̰ÍÀº ¾Æ¸¶µµ Ç¥ÁØ ºÎÈ£Çü Á¤¼ö ŸÀÔµé(short int, int ¶Ç´Â long int)ÁßÀÇ Çϳª°¡ µÉ °ÍÀÌÁö¸¸, Ç¥ÁØ ºÎÈ£Çü Á¤¼ö ŸÀÔµéÀÌ ÀÌ·¯ÇÑ ¸ñ ÀûÀ¸·Î Á¸ÀçÇÑ´Ù¸é ºñÇ¥ÁØ Å¸ÀÔÀÌ µÇ¾î¹ö¸± °ÍÀÌ´Ù.

µ¥ÀÌÅÍ Å¸ÀÔ : size__t

À̰ÍÀº ¿ÀºêÁ§Æ®(objects)ÀÇ Å©±â¸¦ ³ªÅ¸³»´Âµ¥ »ç¿ëÇÏ´Â ºñºÎÈ£Çü Á¤¼ö ŸÀÔÀÌ´Ù. sizeof ¿¬»êÀÇ °á °ú°¡ ÀÌ Å¸ÀÔÀ» °®°í, malloc( 3.3Àý [Unconstrained Allocation] 22 ÆäÀÌÁö ÂüÁ¶.) ±×¸®°í memcpy(5.4Àý [Copying and Concatenation] 46 ÆäÀÌÁö ÂüÁ¶.)°ú °°Àº ÇÔ¼öµéÀº ¿ÀºêÁ§Æ®ÀÇ Å©±â¸¦ Á¤Çϴµ¥ ÀÌ Å¸ÀÔÀÇ Àμö¸¦ ¹Þ¾ÆµéÀδÙ.

»ç¿ë¹ý ³ëÆ®: size_t´Â ¿ÀºêÁ§Æ®ÀÇ Å©±â¸¦ ÀúÀåÇÏ´Â Àμö³ª º¯¼ö¸¦ ¼±¾ðÇϴµ¥ ÁÁÀº ¹æ¹ýÀ» Á¦°øÇÑ ´Ù.

GNU ½Ã½ºÅÛ¿¡¼­ size_t´Â unsigned int ¶Ç´Â unsigned long int ¿Í µ¿ÀÏÇÏ´Ù. ±× ŸÀÔµéÀº GNU ½Ã½ºÅÛ »ó¿¡¼­ µ¿ÀÏÇÑ Æ¯¼ºÀ» °®°í ÀÖ°í, ±×µéÀ» »ç¿ëÇÒ ¶§ ´ëºÎºÐÀº ±×µé »çÀ̸¦ ¼­·Î º¯°æ½ÃŰÁö ¾Ê°íµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö¸¸, ±×µéÀº ¾î¶² ±¸¹®µé¿¡¼­´Â Â÷À̸¦ °®±â ¶§¹®¿¡ ´Ù¸¥ µ¥ÀÌÅÍŸÀÔÀ¸ ·Î ±¸ºÐµÈ °ÍÀÌ´Ù.

¿¹¸¦µé¾î, ÇÔ¼öÀÇ ¿øÇüÀ¸·Î ÇÔ¼ö ÀμöÀÇ Å¸ÀÔÀ» Á¤ÇÒ ¶§, ´ç½ÅÀÌ »ç¿ëÇÏ´Â °ÍÀº Â÷À̰¡ ÀÖ´Ù. ¸¸ ÀÏ ½Ã½ºÅÛ Çì´õÆÄÀÏÀÌ size_t ŸÀÔÀÇ Àμö¸¦ °®´Â malloc ÇÔ¼ö¸¦ ¼±¾ðÇϰí, ´ç½ÅÀÌ unisgned intÀÇ Å¸ÀÔÀ» °®´Â malloc¸¦ ¼±¾ðÇßÀ» ¶§, ¸¸ÀÏ size_t°¡ ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡¼­ unisgned long intÇüÀ¸·Î ¹ß»ý ÇÑ´Ù¸é, ´ç½ÅÀº ÄÄÆÄÀÏ ¿¡·¯¸¦ ¾òÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¹®Á¦ÀÇ °¡´É¼ºÀ» ÇÇÇϱâ À§Çؼ­, ÇÔ¼öÀÇ Àμö³ª °ªÀº ´Ù¸¥ ¹æ¹ýÀ¸·Î ±× ÇüÀ» ¼±¾ðÇϱ⠺¸´Ù´Â size_tÀÇ Å¸ÀÔÀ» °®µµ·Ï ¼±¾ðÇ϶ó.

ȣȯ¼º ³ëÆ® : ANSI C°¡ ³ªÅ¸³ª±â Àü¿¡ C´Â Æ÷ÀÎÅÍ »¬¼ÀÀÇ °á°ú¸¦ ³ªÅ¸³»±â À§Çؼ­ int¸¦ »ç¿ëÇÏ °í ¿ÀºêÁ§Æ®ÀÇ Å©±â¸¦ Ç¥ÇöÇϱâ À§Çؼ­ unsigned int¸¦ »ç¿ëÇß¾ú´Ù. ±×µéÀº size_t³ª ptrdiff_t¸¦ Á¤ÀÇÇÒ Çʿ䰡 ¾ø¾ú´Ù. À¯´Ð½º ½Ã½ºÅÛµéÀº `sys/types.h'¿¡ size_t¸¦ Á¤ÀÇÇØ³õ¾ÒÁö¸¸, ±× Á¤ÀÇ´Â º¸Åë signed ÇüÀ» ¸»ÇÑ´Ù.

A.5 µ¥ÀÌÅÍ Å¸ÀÔ ÃøÁ¤.

´ç½ÅÀÌ ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Â ¿ÀºêÁ§Æ®ÀÇ Àû´çÇÑ C µ¥ÀÌÅÍ Å¸ÀÔÀ» ¼±Á¤ÇÒ ¶§ ´ëºÎºÐ ±×°Í ÀÌ ¾ó¸¶³ª ¸¹Àº ºñÆ®µéÀ» »ç¿ëÇÏ°í ±× ¿ÀºêÁ§Æ®°¡ ¾î¶»°Ô Ç¥ÇöµÇ´ÂÁö¿¡ °ü½ÉÀ» °¡Áú Çʿ䰡 ¾ø´Ù. ´ç½ÅÀÌ ±×¿Í °°Àº Á¤º¸¸¦ ÇÊ¿ä·Î ÇÒ ¶§, C ¾ð¾î ÀÚü´Â ±×°ÍÀ» ¾òÀ» ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â ´Ù. Çì´õÆÄÀÏ `limits.h'¿Í `float.h'¿¡ Æ÷ÇÔµÈ ¸ÅÅ©·ÎµéÀº ´ç½Å¿¡°Ô ±×°Í¿¡ °üÇÑ ¼¼½ÉÇÑ Á¤º¸¸¦ ÁÙ °Í ÀÌ´Ù.

A.5.1 Á¤¼ö Å×ÀÌŸ ŸÀÔÀÇ ³Êºñ °è»êÇϱâ.

Á¤¼ö ŸÀÔÀÌ ¾ó¸¶³ª ¸¹Àº ºñÆ®·Î ±¸¼ºµÇ¾ú´ÂÁö ¾Ë Çʿ䰡 ÀÖ´Â ÇÁ·Î±×·¥Àº ºñÆ® º¤ÅÍ(bit vector)·Î ½á lont intÀÇ ¹è¿­À» »ç¿ëÇÏ´Â °æ¿ì°¡ ÀϹÝÀûÀÌ´Ù.

´ç½ÅÀº vector[n / LONGBITS] & (1 << (n % LONGBITS)) ·Î À妽º NÀ» ±¸¼ºÇÏ´Â ºñÆ®¸¦ ¾ï¼¼ ½ºÇÒ ¼ö ÀÖ´Ù. LONGBITS´Â long int¸¦ ±¸¼ºÇÏ´Â ºñÆ®ÀÇ °³¼ö·Î ´ç½ÅÀÌ Á¤ÀÇÇØ¼­ °ø±ÞÇ϶ó.

C ¾ð¾î¿¡¼­ Á¤¼ö µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ÀÖ´Â ºñÆ®ÀÇ ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ´ç½Å¿¡°Ô ÁÙ ¼ö ÀÖ´Â ¿¬»êÀÚ´Â ¾ø ´Ù. ±×·¸Áö¸¸ Çì´õÆÄÀÏ `limits.h'¿¡ Á¤ÀÇµÈ ¸ÅÅ©·Î CHAR_BIT¸¦ »ç¿ëÇØ¼­ ±×°ÍÀ» °è»êÇÒ ¼ö ÀÖ´Ù.

CHAR_BIT

À̰ÍÀº ÇÑ °³ÀÇ char¾È¿¡ ÀÖ´Â ºñÆ®ÀÇ °³¼ö¸¦ ¸»Çϴµ¥, ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ ±×°ªÀº 8ÀÌ´Ù. ±× °ª Àº intÇüÀ» °®´Â´Ù. ´ç½ÅÀº ´ÙÀ½Ã³·³ ¾î´À µ¥ÀÌÅÍ Å¸ÀÔ type¾ÈÀÇ ºñÆ®ÀÇ °³¼ö¸¦ °è»êÇÒ ¼ö ÀÖ´Ù

A.5.2 Á¤¼ö ŸÀÔÀÇ ¹üÀ§.

´ç½ÅÀÌ 0¿¡¼­ ÀϹ鸸 »çÀÌ¿¡ ÀÖ´Â Á¤¼öÀÇ °ªÀ» ÀúÀåÇÒ Çʿ䰡 ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. ´ç½ÅÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â °¡ÀåÀÛÀº ŸÀÔÀº ¹«¾ùÀΰ¡? ±×°ÍÀ» Á¤Çϴµ¥ ÀϹÝÀûÀÎ ±ÔÄ¢Àº ¾ø´Ù; ±×°ÍÀº C ÄÄÆÄÀÏ·¯ ¿Í ¸ñÇ¥ ¸Ó½®(machine)¿¡ ÀÇÁ¸ÇÑ´Ù. ´ç½ÅÀº ŸÀÔÀ» °áÁ¤Çϱâ À§Çؼ­ `limits.h'¿¡ ÀÖ´Â ¸ÅÅ©·Î `MIN'°ú `MAX'¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

°¢°¢ÀÇ ºÎÈ£°¡ ÀÖ´Â Á¤¼ö ŸÀÔÀº ±×°ÍÀÌ ÀúÀåÇÒ ¼ö ÀÖ´Â °¡Àå ÀÛÀº °ª°ú °¡Àå Å« °ªÀ» ³ªÅ¸³»´Â ÇѽÖÀÇ ¸ÅÅ©·Î¸¦ °®´Â´Ù. ºÎÈ£°¡ ¾ø´Â Á¤¼ö ŸÀÔÀº ÃÖ´ëÀÇ °ªÀ» ³ªÅ¸³»´Â ÇÑ °³ÀÇ ¸ÅÅ©·Î¸¦ °®´Â ´Ù; ÃÖ¼Ò°ªÀº ¹°·Ð 0ÀÌ´Ù. ±× ¸ÅÅ©·ÎµéÀÇ °ªÀº ¸ðµÎ Á¤¼ö »ó¼ö Ç¥ÇöÀÌ´Ù. ´Ù¸¥ ŸÀÔµéÀ» À§ÇÑ `MAX' ¿Í `MIN' ¸ÅÅ©·ÎµéÀº ¸ÅÅ©·Î¿¡ ÀÇÇØ ¼³¸íµÈ °°Àº ŸÀÔÀÇ °ªÀ» °®´Â´Ù_±×·¡¼­ ULONG_MAX´Â unisgned long int ÀÇ Å¸ÀÔÀ» °®´Â´Ù.

SCHAR_MIN

signed char¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ¼Ò°ª.

SCHAR_MAX

UCHAR_MAX

signed char ¿Í unsigned char¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª.

CHAR_MIN

char ¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ¼Ò°ª. ¿©±â¼­ ¸¸ÀÏ char¿¡ ºÎÈ£°¡ Àִ°ÍÀ̶ó¸é SCHAR_MIN°ú °° °í, ±×·¸Áö ¾Ê´Ù¸é 0ÀÌ´Ù.

CHAR_MAX

char ¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª. char°¡ ºÎÈ£°¡ ÀÖ´Â °ÍÀ̶ó¸é SCHAR_MAX¿Í °°°í, ±×·¸Áö ¾Ê´Ù¸é UCHAR_MAX¿Í °°´Ù.

SHRT_MIN

signed short int¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ¼Ò°ª. GNU C ¶óÀ̺귯¸®°¡ ½ÇÇàµÇ´Â ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ ¿¡¼­, short int ´Â 16-ºñÆ®·Î µ¿ÀÏÇÏ´Ù.

SHRT_MAX

USHRT_MAX

signed short int ¿Í unsigned short int¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª.

INT_MIN

signed int ¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ¼Ò°ª. GNU C ½Ã½ºÅÛÀÌ ½ÇÇàµÇ´Â ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ¿¡¼­, int 32-ºñÆ®·Î µ¿ÀÏÇÏ´Ù.

INT_MAX

UINT_MAX

signed int ¿Í unsigned int ¿¡ ÀÇÇØ °¢°¢ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ªµé.

LONG_MIN

signed long int ¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª. GNU C ½Ã½ºÅÛÀÌ ½ÇÇàÁßÀÎ ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ¿¡¼­, long Á¤¼öµéÀº int¿Í µ¿ÀÏÇÑ Å©±â¸¦ °®°í 32-ºñÆ®·Î µ¿ÀÏÇÏ´Ù.

LONG_MAX

ULONG_MAX

signed long int ¿Í unsigned long int¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª.

LONG_LONG_MIN

signed long long int¿¡ ÀÇÇØ¼­ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ¼Ò°ª. GNU C ½Ã½ºÅÛÀÌ ½ÇÇàµÇ´Â ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ ¿¡¼­, long long Á¤¼öµéÀº 64-ºñÆ®·Î µ¿ÀÏÇÏ´Ù.

LONG_LONG_MAX

ULONG_LONG_MAX

signed long long int ¿Í unsigned long long int¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª.

WCHAR_MAX

wchar_t¿¡ ÀÇÇØ Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ´ë°ª. 18.4Àý [Wide Char Intro] 252 ÆäÀÌÁö ÂüÁ¶.

Çì´õÆÄÀÏ `limits.h'´Â ¶ÇÇÑ ´Ù¾çÇÑ ¿î¿µÃ¼Á¦¿Í ÆÄÀÏ ½Ã½ºÅÛ Á¦ÇѵéÀ» ÆÄ¶ó¹ÌÅÍÈ­ÇÑ ºÎ°¡ÀûÀÎ »ó¼ö µéÀ» Á¤ÀÇÇϰí ÀÖ´Ù. ±× »ó¼öµéÀº 27Àå[System Configuration] 369 ÆäÀÌÁö¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.

A.5.3 ºÎµ¿Çü ¸ÅÅ©·Îµé.

ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼öÀÇ ±¸Ã¼ÀûÀΠǥÇö ¹æ¹ýÀº ±â°è¸¶´Ù ´Ù¸£´Ù. ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼öµéÀº ³»ºÎÀûÀ¸·Î ±Ù»çÄ¡·Î½á Ç¥ÇöµÇ±â ¶§¹®¿¡, ÇÃ·ÎÆÃ Æ÷ÀÎÆ® µ¥ÀÌÅ͸¦ ´Ù·ç±â À§ÇÑ ¾Ë°í¸®ÁòÀº, ¶§¶§·Î ±â°èÀÇ Ç÷ΠÆÃ Æ÷ÀÎÆ® Ç¥Çö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤¹Ðµµ¸¦ ÂüÀÛÇϴµ¥ »ç¿ëµÈ´Ù.

C ¶óÀ̺귯¸®¿¡¼­ ¾î¶² ÇÔ¼öµéÀº ÀÌ·¯ÇÑ Á¤º¸¸¦ ÇÊ¿ä·Î ÇÑ´Ù; ¿¹¸¦µé¾î, ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ýÀÚµéÀ» Àаųª Ãâ·ÂÇÏ´Â ¾Ë°í¸®Áò (7Àå [I/O on Stream] 63 ÆäÀÌÁö ÂüÁ¶) °ú »ï°¢ÇÔ¼ö¸¦ °è»êÇϱâ À§ÇÑ ¾Ë °í¸®Áò ±×¸®°í ¹«¸®¼ö ÇÔ¼öµéÀ» À§ÇÑ ¾Ë°í¸®ÁòµéÀº Á¤È®¼ºÀÇ »ó½ÇÀ̳ª ¹Ý¿Ã¸²-¿¡·¯¸¦ ÇÇÇϱâ À§ÇØ ¼­ ±× Á¤º¸¸¦ »ç¿ëÇÑ´Ù. ¼öÇÐÀûÀÎ ºÐ¼® ±â¼úÀ» ´Ù·ç´Â ÇÁ·Î±×·¥µéÀº ¿¡·¯ °æ°è¸¦ °è»êÇϰųª ÃÖ¼Ò È­ÇϱâÀ§Çؼ­ ÀÌ Á¤º¸¸¦ ÇÊ¿ä·Î ÇÑ´Ù. Çì´õÆÄÀÏ `float.h'´Â ´ç½ÅÀÇ ±â°è¿¡ ÀÇÇØ¼­ »ç¿ëµÇ´Â Çü½ÄÀ» ¼³¸íÇÑ´Ù.

A.5.3.1 ÇÃ·ÎÆÃ Æ÷ÀÎÆ® Ç¥±â °³³ä.

ÀÌ ÀýÀº ÇÃ·ÎÆÃ Æ÷ÀÎÆ® Ç¥Çö¹ýÀ» ¼³¸íÇϱâ À§ÇÑ ¿ë¾îµéÀ» ¼³¸íÇÑ´Ù. ´ç½ÅÀº ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ýÀÚµé À» Ç¥ÇöÇÏ´Â °úÇÐÀûÀΠǥ±â ¶Ç´Â Áö¼öÀûÀΠǥ±âÀÇ °³³ä¿¡ ´ëÇØ¼­ ÀÌ¹Ì Ä£¼÷ÇÒ °ÍÀÌ´Ù. ¿¹¸¦µé¾î, ¼ý ÀÚ 123456.0Àº °¡¼ö°¡ 1.23456ÀÌ°í º£À̽º°¡ 10À¸·Î 5½ÂÀÓÀ» °¡¸®Å°´Â, 1.234546e+05ÀÇ Áö¼öÀû Ç¥±â ·Î½á Ç¥ÇöµÉ ¼ö ÀÖ´Ù.

´õ Çü½ÄÀûÀ¸·Î, ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼öÀÇ ³»ºÎÀû Ç¥ÇöÀº ´ÙÀ½ÀÇ ÆÄ¶ó¹ÌÅÍ·Î½á Æ¯Â¡À» ³ªÅ¸³¾ ¼ö ÀÖ´Ù.

o ºÎÈ£´Â -1 ¶Ç´Â 1 ÀÌ´Ù.

o Áö¼ö¸¦ À§ÇÑ º£À̽º(base) ¶Ç´Â ±â¼ö(radix)´Â 1º¸´Ù Å« Á¤¼öÀÌ´Ù. À̰ÍÀº ƯÁ¤ Ç¥±â¿¡ µû¶ó¼­ ´Ù ¸¥ »ó¼öÀÌ´Ù.

o º£À̽º¿¡ ¸î½ÂÀÎÁö¸¦ ³ªÅ¸³»´Â ¼ö°¡ Áö¼öÀÌ´Ù. Áö¼öÀÇ »óÇѰú ÇÏÇÑÀº ƯÁ¤ÇÑ Ç¥±â¿¡ µû¶ó¼­ ´Ù¸¥ »ó¼öÀÌ´Ù.

¶§¶§·Î, ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ö¸¦ Ç¥ÇöÇϰí ÀÖ´Â ½ÇÁ¦ ºñÆ®µé¿¡¼­, Áö¼ö¸¦ Ç×»ó unsigned·Î Ç¥ÇöµÇµµ·Ï ¸¸µé±â À§Çؼ­ ±×°Í¿¡ »ó¼ö¸¦ ´õÇÏ¿© ºÎÈ£ÀÇ Àǹ̸¦ ºÎ¿©ÇÑ´Ù. À̰ÍÀº ¸¸ÀÏ ´ç½ÅÀÌ Á÷Á¢ ÇÃ·ÎÆÃ Æ÷ ÀÎÆ® ¼ö¸¦ ±¸¼ºÇϰí ÀÖ´Â ºñÆ® ¿µ¿ªµéÀÇ ¾î¶² ºÎºÐÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì¿¡¸¸ Áß¿äÇÏ´Ù. GNU ¶óÀ̺귯¸®´Â ÀÌ·¯ÇÑ °ÍÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ´ÙÀ½ºÎÅÍ´Â À̰Ϳ¡ ´ëÇÑ ³íÀÇ´Â ¹«½ÃµÉ °ÍÀÌ ´Ù.

o °¡¼öºÎ(mantissa) ¶Ç´Â À¯È¿¼ö(significand)´Â ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ýÀÚ¸¦ ÀÌ·ç´Â ÇѺκÐÀ¸·Î½á ºÎÈ£°¡ ¾ø´Â Á¤¼öÀÌ´Ù.

o °¡¼öºÎÀÇ Á¤¹Ðµµ. ¸¸ÀÏ ¾î¶² ÇÃ·ÎÆÃ Ç¥Çö¿¡¼­ º£À̽º(base)°¡ b¶ó°í ÇßÀ» ¶§, Á¤¹Ðµµ´Â º£À̽º -b¸¦ ±â¹ÝÀ¸·Î °¡¼öºÎ¾È¿¡ µé¾î°¡ÀÖ´Â ¼ýÀÚµéÀÇ °³¼öÀÌ´Ù. (Áï.. °¡¼öºÎ°¡ ¸î °³ÀÇ ºñÆ®·Î½á Ç¥ÇöµÇ ´À³Ä¸¦ Á¤¹Ðµµ¶ó°í ÇÑ´Ù.) À̰ÍÀº ƯÁ¤ÇÑ Ç¥Çö¿¡ µû¶ó ´Ù¸¥ »ó¼öÀÌ´Ù.

¸¹Àº ÇÃ·ÎÆÃ Æ÷ÀÎÆ® Ç¥ÇöµéÀº °¡¼öºÎ¾È¿¡ ¾Ï¹¬ÀûÀ¸·Î ¼û°ÜÁø ºñÆ®¸¦ °¡Áö°í ÀÖ´Ù. À̰ÍÀº °¡¼öºÎ ¾È¿¡¼­ ½ÇÁúÀûÀ¸·Î´Â Ç¥ÇöµÇÁö¸¸ ±× °ªÀÌ Ç×»ó 1·Î µÇ¾îÀֱ⠶§¹®¿¡ ¸Þ¸ð¸®¿¡´Â ÀúÀåµÇÁö ¾Ê´Â´Ù. Á¤¹Ðµµ ÇüÅ´Â(À§¸¦ º¸¶ó) ¼û°ÜÁø ºñÆ®µéµµ Ç¥ÇÔÇÑ´Ù. ´Ù½Ã, GNU ¶óÀ̺귯¸®´Â ÇÃ·ÎÆÃ Æ÷ÀÎÆ® Ç¥Çö À» À§Çؼ­ ±×¿Í °°Àº Àú¼öÁØÀÇ °üÁ¡À» ´Ù·ç´Â ±â´ÉÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù.

ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼öÀÇ °¡¼öºÎ´Â Áö¼öÀÇ ¸î½ÂÀ» °¡Áø ÇÔÃàÀûÀÎ ¼Ò¼öºÎ·Î½á Ç¥ÇöµÈ´Ù. ±×·¡¼­ °¡Àå Å© °Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Â °¡¼öºÎ°¡ ÀÌ Á¤¹Ðµµº¸´Ù ÀûÀº °ÍÀ̸é, ¼Ò¼öÀÇ °ªÀº Ç×»ó 1º¸´Ù Àû´Ù. ÇÃ·ÎÆÃ Æ÷ ÀÎÆ® ¼öÀÇ ¼öÇÐÀûÀÎ °ªÀº ¼Ò¼ö, ºÎÈ£ ±×¸®°í º£À̽ºÀÇ ¸î½ÂÀÓÀ» ³ªÅ¸³»´Â Áö¼ö·Î½á ¸¸µé¾îÁø´Ù.

b°¡ º£À̽º¶ó°í ÇßÀ» ¶§, ¼Ò¼ö°¡ Àû¾îµµ 1/b¶ó¸é, ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ö°¡ ÀϹÝÈ­µÇ¾ú´Ù°í ¸»ÇÑ´Ù. ¹Ù²Ù¾î ¸»Çϸé, °¡¼öºÎ¿¡ Áö¼ö½ÂÀÌ °öÇØÁö¸é ¸ÂÃ߱⿡ ³Ê¹« Å©°Ô µÉ °ÍÀÌ´Ù. ºñ-ÀϹÝÈ­µÈ ¼öµéÀº µð³ë¸Ö(denomal)À̶ó°í ºÎ¸¥´Ù; ±×µéÀº ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ö°¡ ÀϹÝÀûÀ¸·Î ÀúÀåµÉ ¼ö ÀÖ´Â Á¤¹Ðµµ º¸ ´Ùµµ ÀÛÀº Á¤¹Ðµµ¸¦ °®°í ÀÖ´Ù.

¸¸ÀÏ ±× ¼ö°¡ ÀϹÝÈ­µÇÁö ¾Ê¾Ò´Ù¸é, °¡¼öºÎ¸¦ base·Î ³ª´«´ÙÀ½ ³ª¿Â Áö¼ö·ÎºÎÅÍ 1À» »¬ ¼ö ÀÖ°í, ±×·¯¸é °°Àº °ªÀ» °¡Áø ´Ù¸¥ Ç¥±âÇü½ÄÀÇ ÇÃ·ÎÆÃ Æ÷ÀÎÆ®¸¦ ¾ò°Ô µÈ´Ù. ±× ¼ö°¡ ÀϹÝÈ­µÉ¶§±îÁö ¹Ýº¹ ÀûÀ¸·Î À§¿Í °°Àº ÀÏÀ» Çϸé ÀϹÝÈ­µÈ ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ö°¡ ³ª¿À°Ô µÈ´Ù. µÎ °³ÀÇ ´Ù¸¥ ÀϹÝÈ­µÈ Çà ·ÎÆÃ Æ÷ÀÎÆ® ¼öµéÀº °ªÀÌ °°À» ¼ö ¾ø´Ù.

( ÀÌ ±ÔÄ¢¿¡´Â ¿¹¿Ü°¡ ÀÖ´Ù: ¸¸ÀÏ °¡¼öºÎ°¡ 0À̶ó¸é, ±×°ÍÀº ÀϹÝÈ­µÈ °ÍÀ¸·Î °£ÁֵȴÙ. ƯÁ¤ÇÑ ±â °è¿¡¼­ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¹¿Ü»óȲÀ̶õ, Áö¼öºÎ°¡ ±× Ç¥±â¹ýÀ¸·Î ÀúÀåÇÒ ¼ö Àֱ⿡´Â ³Ê¹« ÀÛÀº °æ¿ì ÀÌ´Ù. ±×·¯¸é Áö¼öºÎ·Î ºÎÅÍ 1À» »©´Â °ÍÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡ , ¼Ò¼ö°¡ 1/bº¸´Ù ÀûÀº ¼Ò¼öºÎ¶ó¸é ÀϹÝÈ­µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù.)

A.5.3.2 ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ÆÄ¶ó¹ÌÅ͵é

´ÙÀ½ ¸ÅÅ©·Î Á¤ÀǵéÀº Çì´õÆÄÀÏ `float.h'¿¡ ÀÖ´Ù. `FLT_'·Î ½ÃÀÛÇÏ´Â ¸ÅÅ©·ÎµéÀº float ŸÀÔ¿¡ °ü ÇѰÍÀ̰í, `DBL_'·Î ½ÃÀ۵Ǵ ¸ÅÅ©·ÎµéÀº double ŸÀÔ¿¡ °üÇѰÍÀ̰í `LDBL_'·Î ½ÃÀ۵Ǵ ¸ÅÅ©·Îµé Àº long double ŸÀÔ¿¡ °üÇÑ °ÍÀÌ´Ù. (ÇöÀç GCC ´Â ºÐ¸®µÈ µ¥ÀÌÅÍ ÇüÀ¸·Î½á long double¸¦ Áö¿øÇÏ Áö ¾Ê±â ¶§¹®¿¡, `LDBL_'»ó¼öµéÀ» À§ÇÑ °ªµéÀº doubleÇüÀ» À§ÇÑ »ó¼ö¿¡ ÇØ´çµÇ´Â °ª°ú °°´Ù.)

±× ¸ÅÅ©·Îµé Áß¿¡¼­, ¿ÀÁ÷ FLT_RADIX´Â »ó¼ö Ç¥Çö½ÄÀÌ µÇµµ·Ï º¸ÁõµÈ´Ù. À̰÷¿¡ ¼³¸íµÈ ´Ù¸¥ ¸Å Å©·ÎµéÀº »ó¼ö Ç¥Çö½Ä, `#if'¿Í °°Àº Àüó¸® Áö½ÃÀÚ ¶Ç´Â Á¤Àû ¹è¿­¾ÈÀÇ Â÷¿øÀ» ¿ä±¸ÇÏ´Â °÷¿¡¼­ »ç ¿ëµÉ ¼ö ¾ø´Ù.

ANSI C Ç¥ÁØÀÌ ´ëºÎºÐÀÇ ÆÄ¶ó¹ÌÅ͵éÀ» À§ÇÑ ÃÖ¼Ò°ª°ú ÃÖ´ë°ªÀ» Á¤Çß´Ù°í ÇÏ´õ¶óµµ, GNU C´Â ¸ñ Ç¥ ±â°èÀÇ ÇÃ·ÎÆÃ Æ÷ÀÎÆ® Ç¥Çö¿¡ µû¸¥ °ªÀ» »ç¿ëÇÑ´Ù. ±×·¡¼­ GNU C´Â ¸ñÇ¥ ±â°è°¡ ¾ÈÁ¤ÀûÀ̶ó¸é ANSI C ¿ä±¸¸¦ ¸¸Á·½ÃŰ°Ô µÇ´Â °ÍÀÌ´Ù. ½ÇÁ¦·Î, ÇöÀç Áö¿øµÇ´Â ¸ðµç ±â°èµéÀº ¾ÈÁ¤Àû

ÀÌ´Ù.

FLT_ROUNDS

ÀÌ °ªÀº ¹Ý¿Ã¸² Çü½ÄÀ» ÁöÁ¤ÇÏ´Â °ªÀÌ´Ù. ´ÙÀ½°ªÀº Ç¥ÁØ ¹Ý¿Ã¸² ¸ðµå¸¦ ³ªÅ¸³½´Ù.

-1 ¹Ý¿Ã¸²ÇÏÁö ¾Ê´Â´Ù.

0 ¼Ò¼öÁ¡ µÚ¸¦ 0À¸·Î ¸¸µç´Ù.

1 °¡Àå °¡±î¿î ¼ö·Î ¹Ý¿Ã¸²ÇÑ´Ù.

2 ¹«ÇÑ´ë·Î ¾çÀÇ °ªÀ» ÇâÇÑ´Ù.

3 ¹«ÇÑ´ë·Î À½ÀÇ °ªÀ» ÇâÇÑ´Ù.

ÀÌ ÀÌ¿ÜÀÇ °ªÀº ±â°è_ÀÇÁ¸ÀûÀÎ ºñÇ¥ÁØ ¹Ý¿Ã¸² ¸ðµå¸¦ ³ªÅ¸³½´Ù. ´ëºÎºÐÀÇ ±â°è¿¡¼­, ±× °ªÀº IEEE Ç¥ÁØ¿¡ µû¶ó¼­ 1·Î µÇ¾îÀÖ´Ù.

´ÙÀ½Àº FLT_ROUNDSÀÇ °ª¿¡ µû¶ó¼­ °ªµéÀÌ ¾î¶»°Ô º¯ÇÏ´ÂÁö¸¦ º¸¿©ÁÖ´Â Å×À̺íÀÌ´Ù,

0 1 2 3

1.00000003 1.0 1.0 1.00000012 1.0

1.00000007 1.0 1.00000012 1.00000012 1.0

-1.00000003 -1.0 -1.0 -1.0 -1.00000012

-1.00000007 -1.0 -1.00000012 -1.0 -1.00000012

FLT_RADIX

À̰ÍÀº Áö¼öºÎÀÇ º£À̽º(base) ¶Ç´Â ±â¼ö(radix)ÀÇ °ªÀÌ´Ù. À̰ÍÀº ÀÌ Àý¿¡ ¼³¸íµÈ ´Ù¸¥ ¸ÅÅ©·Î¿Í´Â ´Þ¸® »ó¼ö Ç¥Çö½ÄÀÓÀÌ º¸ÀåµÈ´Ù. IBM 360°ú ±×°÷¿¡¼­ ÆÄ»ýµÈ Á¦Ç°À» Á¦¿ÜÇϰí´Â ¸ðµç ±â°è¿¡¼­ 2 ·Î µÇ¾îÀÖ´Ù.

FLT_MANT_DIG

floatÇü¿¡¼­ °¡¼öºÎ¸¦ Ç¥ÇöÇϴµ¥ »ç¿ëµÇ´Â ºñÆ®¼ö. ´ÙÀ½ Ç¥Çö½ÄÀº °¡¼öºÎ ¼ýÀÚµéÀÇ Á¦ÇÑµÈ ¼ö ¶§¹® ¿¡ 1.0ÀÌ ³ª¿Â´Ù(¼öÇÐÀûÀ¸·Î´Â ±×°ÍÀÌ µÉ ¼ö ¾øÀ» Áö¶óµµ):

float radix = FLT_RADIX;

1.0f + 1.0f / radix / radix / . . . / radix

¿©±â¼­ radix´Â FLT_MANT_DIG ¹ø ³ªÅ¸³­´Ù.

DBL_MANT_DIG

LDBL_MANT_DIG

À̰ÍÀº °¢°¢ double °ú long doubleÇü °¢°¢ÀÌ °¡¼öºÎ¸¦ Ç¥ÇöÇϴµ¥ »ç¿ëµÇ´Â ºñÆ®¼öÀÌ´Ù.

FLT_DIG

This is the number of decimal digits of precision for the float data type. Technically, if p and b are the precision and base (respectively) for the representation, then the decimal precision q is the maximum number of decimal digits such that any floating point number with q base 10 digits can be rounded to a floating point number with p base b digits and back again, without change to the q decimal digits.

floatÇü¿¡¼­ À¯È¿¼ýÀÚÀÇ ÃÖ¼Ò°³¼ö.

ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº ANSI C¿¡¼­, Àû¾îµµ 6À¸·Î Áö¿øµÇ°í ÀÖ´Ù.

DBL_DIG

LDBL_DIG

FLT_DIG¿Í À¯»çÇÏÁö¸¸, double¿Í long doubleÇüÀ» À§ÇÑ °ÍÀÌ´Ù. ±× ¸ÅÅ©·ÎÀÇ °ªÀº Àû¾îµµ 10ÀÌ µÇ µµ·Ï Áö¿øµÈ´Ù.

FLT_MIN_EXP

À̰ÍÀº floatÇüÀ» À§Çؼ­ °¡´ÉÇÑ Áö¼ö°ªÀ¸·Î °¡ÀåÀÛÀº °ªÀÌ´Ù. ´õ ÀÚ¼¼ÇϰԴÂ, FLT_RADIX¿¡¼­ 1À» »«°ªÀÌ floatÇüÀ¸·Î½á ÀϹÝÈ­µÈ ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼ö·Î½á Ç¥ÇöµÉ ¼ö ÀÖ´Â ÃÖ¼Ò À½ÀÇ Á¤¼öÀÌ´Ù.

DBL_MIN_EXP

LDBL_MIN_EXP

FLT_MIN_EXP¿Í À¯»çÇÏÁö¸¸, double ¿Í long double¸¦ À§ÇÑ °ÍÀÌ´Ù.

FLT_MIN_10_EXP

This is the minimum negative integer such that 10 raised to this power minus 1 can be representedas a normalized floating point number of type float. This is supposed to be -37 or even less.

Áö¼öºÎÀÇ ÃÖ¼Ò¹üÀ§. -37À̰ųª ±×º¸´Ù Àû´Ù.

DBL_MIN_10_EXP

LDBL_MIN_10_EXP

double¿Í long doubleÇü °¢°¢À» À§ÇÑ °ÍÀ¸·Î, Áö¼ö°¡ ³ªÅ¸³¾ ¼ö ÀÖ´Â ÃÖ¼Ò¹üÀ§.

FLT_MAX_EXP

This is the largest possible exponent value for type float. More precisely, this is the maximum positive integer such that value FLT_RADIX raised to this power minus 1 can be represented as a floating point number of type float.

floatÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Â Áö¼öÀÇ ÃÖ´ë°ª.

DBL_MAX_EXP

LDBL_MAX_EXP

double ¿Í long doubleÇüÀÌ °¢°¢ Ç¥ÇöÇÒ ¼ö ÀÖ´Â Áö¼öÀÇ ÃÖ´ë°ª.

FLT_MAX_10_EXP

This is the maximum positive integer such that 10 raised to this power minus 1 can be represented as a normalized floating point number of type float. This is supposed to be at least 37.

floatÇü¿¡¼­ º£À̽º°¡ 10À϶§ Ç¥ÇöÇÒ ¼ö ÀÖ´Â Áö¼öÀÇ ÃÖ´ë°ª. À̰ÍÀº Àû¾îµµ 37ÀÌ´Ù.

DBL_MAX_10_EXP

LDBL_MAX_10_EXP

double ¿Í long doubleÇü¿§ º£À̽º°¡ 10ÀÏ ¶§ °¢°¢ÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Â Áö¼öÀÇ ÃÖ´ë°ª.

FLT_MAX

ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº floatÇüÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ÃÖ´ë¼ö¸¦ ÀǹÌÇÑ´Ù. À̰ÍÀº Àû¾îµµ 1E+37ÀÌ µÈ´Ù. °ª ÀÚ Ã¼µµ floatÇüÀ» °®´Â´Ù. Ç¥Çö°¡´ÉÇÑ °¡Àå ÀÛÀº¼ö´Â -FLT_MAX°¡ µÈ´Ù.

DBL_MAX

LDBL_MAX

doble ¿Í long double Çü °¢°¢ÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ÃÖ´ë¼ö¸¦ ÀǹÌÇÑ´Ù. ÀÌ ¸ÅÅ©·Î°ªÀÌ °¡Áö´Â ÇüÀº ±×°ÍÀ» ¼³¸íÇÏ´Â Çü°ú µ¿ÀÏÇÏ´Ù.

FLT_MIN

ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº floatÇüÀÌ Ç¥ÇöÇÒ ¼ö Àִ ǥÁØÈ­µÈ ¾çÀÇ ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼öÀÇ ÃÖ¼Ò°ª. ±× °ªÀº 1E-37º¸´Ù Å©Áö ¾Ê´Ù.

DBL_MIN

LDBL_MIN

double °ú long doubleÇü °¢°¢À» À§ÇÑ °ÍÀ¸·Î Ç¥ÁØÈ­µÈ ¾çÀÇ ÇÃ·ÎÆÃ Æ÷ÀÎÆ®¼öÀÇ ÃÖ¼Ò°ª. ¸ÅÅ©·ÎÀÇ °ª ÀÚü°¡ °¡Áö´Â ÇüÀº ±×°ÍÀÌ ¼³¸íÇÏ´Â Çü°ú µ¿ÀÏÇÏ´Ù.

FLT_EPSILON

1.0 + FLT_EPSILON != 1.0ÀÌ ÂüÀÎ floatÇüÀÇ ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¼öÀÇ ÃÖ¼Ò ¾çÀÇ ¼öÀÌ´Ù. 1E-5º¸´Ù Å© Áö ¾Ê´Ù.

DBL_EPSILON

LDBL_EPSILON

double ¿Í long double¸¦ À§ÇÑ °ÍÀ¸·Î Àǹ̴ FLT_EPSILON°ú °°´Ù. ÀÌ ¸ÅÅ©·Î °ª ÀÚü°¡ °¡Áö´Â ÇüÀº ±×°ÍÀÌ ¼³¸íÇÏ´Â Çü°ú µ¿ÀÏÇÏ´Ù. ±× °ªÀº 1E-9º¸´Ù Å©Áö ¾Ê´Ù.

A.5.3.3 IEEE ÇÃ·ÎÆÃ Æ÷ÀÎÆ®.

´ÙÀ½Àº ÀÌÁø ÇÃ·ÎÆÃ Æ÷ÀÎÆ® ¿¬»êÀ» À§Çؼ­ IEEE Ç¥ÁØ¿¡¼­(ANSI/IEEE Std 754-1985) Á¤ÇÑ, ´ëºÎºÐ ÀÇ ÀÏ¹Ý ÇÃ·ÎÆÃ Æ÷ÀÎÆ® Ç¥±â¿¡¼­ »êÃâµÈ floatÇüÀÇ ´ëºÎºÐÀÇ ¸ÅÅ©·Î °ªÀ» º¸¿©ÁÖ°í ÀÖ´Ù. 1980³â´ë ÀÌÈÄ¿¡ µðÀÚÀÎµÈ ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ´Â ÀÌ Çü½ÄÀ» »ç¿ëÇÑ´Ù.

IEEE ´ÜÁ¤µµ(single-precision) float Ç¥±â¹ýÀº º£À̽º·Î 2¸¦ »ç¿ëÇÑ´Ù. ±×°ÍÀº 23ºñÆ®¿¡ ÇÑ °³ÀÇ ¼û°ÜÁø ºñÆ®¸¦ ´õÇØ¼­(±×·¡¼­ ÃÑ Á¤¹Ðµµ´Â º£À̽º¸¦ 2·Î ÇßÀ»¶§ 24°¡ µÈ´Ù.) ºÎÈ£ ºñÆ®¿Í °¡¼öºÎ¸¦ ³ªÅ¸³»°í, 8-ºñÆ® Áö¼öºÎ´Â -125¿¡¼­ 128±îÁöÀÇ ¹üÀ§¿¡ ÀÖ´Â °ªÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº, floatÇü µ¥ÀÌÅ͸¦ ÀÌ Ç¥±â¹ýÀ» »ç¿ëÇÒ °æ¿ì, ±×°Í¿¡ ¿¬°üµÈ ÆÄ¶ó¹ÌÅÍÀÇ Àû´çÇÑ °ªÀ» ³ªÅ¸³»°í ÀÖ´Ù.

FLT_RADIX 2

FLT_MANT_DIG 24

FLT_DIG 6

FLT_MIN_EXP -125

FLT_MIN_10_EXP -37

FLT_MAX_EXP 128

FLT_MAX_10_EXP +38

FLT_MIN 1.17549435E-38F

FLT_MAX 3.40282347E+38F

FLT_EPSILON 1.19209290E-07F

´ÙÀ½Àº double µ¥ÀÌÅÍ Å¸ÀÔÀ» À§ÇÑ °ªµéÀÌ´Ù.

DBL_MANT_DIG 53

DBL_DIG 15

DBL_MIN_EXP -1021

DBL_MIN_10_EXP -307

DBL_MAX_EXP 1024

DBL_MAX_10_EXP 308

DBL_MAX 1.7976931348623157E+308

DBL_MIN 2.2250738585072014E-308

DBL_EPSILON 2.2204460492503131E-016

A.5.4 ±¸Á¶Ã¼ ÇÊµå ¿É¼Â(offset) ÃøÁ¤.

±¸Á¶Ã¼ Çü¾È¿¡¼­ ƯÁ¤ÇÑ ±¸Á¶Ã¼ ¸â¹öÀÇ À§Ä¡¸¦ °è»êÇϱâ À§Çؼ­´Â offsetof¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¸ÅÅ©·Î : size_t offsetof (type, member)

À̰ÍÀº ±¸Á¶Ã¼ ÇüÀ» °¡Áø type¾È¿¡ ÀÖ´Â member¶ó´Â À̸§À» °¡Áø ±¸Á¶Ã¼ ¸â¹öÀÇ ¿É¼Â(offset)À» ±¸ ÇÏ´Â Á¤¼ö »ó¼ö Ç¥Çö½ÄÀÌ´Ù. ¿¹¸¦µé¾î, offsetof(struct s, elem)Àº struct s¶ó´Â ±¸Á¶Ã¼ ¾È¿¡ ÀÖ´Â ¸â ¹ö elemÀÇ ¿É¼Â(offset)ÀÌ µÈ´Ù. ÀÌ ¸ÅÅ©·Î´Â ¸¸ÀÏ ¸â¹ö°¡ ºñÆ® Çʵ尡 ¾Æ´Ï¸é ÀÛ¾÷ÇÏÁö ¾Ê´Â´Ù; ´ç ½ÅÀº ±× °æ¿ì¿¡ ÄÄÆÄÀÏ·¯·ÎºÎÅÍ ¿¡·¯¸¦ ¾ò°Ô µÉ °ÍÀÌ´Ù.