Previous: Incr, Up: Arithmetic   [Contents][Index]


11.2 À°¿ô¼°¤ò·×»»¤¹¤ë

À°¿ô¼°¤Ïeval¤ò»È¤Ã¤Æ·×»»¤·¤Þ¤¹¡£

eval(expression, opt radix, opt width)

¤³¤Î¥Þ¥¯¥í¤Ïexpression¤ÎÃͤËŸ³«¤µ¤ì¤Þ¤¹¡£

¼°¡Êexpression¡Ë¤Ë¤Ï¼¡¤Î±é»»»Ò¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥ê¥¹¥È¤ÏÍ¥Àè½ç°Ì¤Î¹â¤¤½ç¤Ëʤó¤Ç¤¤¤Þ¤¹¡£

-

ñ¹àº¹¡Êunary minus¡Ë

**

Îß¾è¡Êexponentiation¡Ë

* / %

ÀÑ¡Êmultiplication¡Ë¡¢¾¦¡Êdivision¡Ë¡¢¾ê;¡Êmodulo¡Ë

+ -

Ï¡Êaddition¡Ë¡¢º¹¡Êsubtraction¡Ë

<< >>

º¸¥·¥Õ¥È¡Êshift left¡Ë¡¢±¦¥·¥Õ¥È¡Êshift right¡Ë

== != > >= < <=

´Ø·¸±é»»»Ò¡Êrelational operator¡Ë

!

ÏÀÍýÈÝÄê¡Êlogical negation¡Ë

~

¥Ó¥Ã¥È¤´¤È¤ÎÏÀÍýÈÝÄê¡Êbitwise negation¡Ë

&

¥Ó¥Ã¥È¤´¤È¤ÎÏÀÍýÀÑ¡Êbitwise and¡Ë

^

¥Ó¥Ã¥È¤´¤È¤ÎÇÓ¾ŪÏÀÍýÏ¡Êbitwise exclusive-or¡Ë

|

¥Ó¥Ã¥È¤´¤È¤ÎÏÀÍýÏ¡Êbitwise or¡Ë

&&

ÏÀÍýÀÑ¡Êlogical and¡Ë

||

ÏÀÍýÏ¡Êlogical or¡Ë

Îß¾è¡Êexponentiation¡Ë¤ò½ü¤¤¤¿¤¹¤Ù¤Æ¤Î±é»»»Ò¤Ïº¸·ë¹ç¡Êleft associative¡Ë¤ò¤·¤Þ¤¹¡£

m4¤Î¼ÂÁõ¤Ë¤Ï‘^’¤òÎß¾è¡Êexponentiation¡Ë±é»»»Ò¤ÎÂåÍѤȤ·¤Æ»È¤¦¤â¤Î ¤¬Â¿¤¯¤¢¤ê¤Þ¤¹¤¬¡¢‘^’¤ò¥Ó¥Ã¥È¤´¤È¤ÎÇÓ¾ŪÏÀÍýÏ¡Êbitwise exclusive-or¡Ë ¤Ë»È¤Ã¤Æ¤¤¤ë¼ÂÁõ¤â¿¤¯¤¢¤ê¤Þ¤¹¡£GNU m4¤Ç¤Ï¡¢¤«¤Ä¤Æ‘^’¤ÏÎß¾è¤ò¹Ô¤¦ ±é»»»Ò¤Ç¤·¤¿¤¬¡¢Æ°ºî¤ÎÊѹ¹¤ò¹Ô¤¤¡¢¸½ºß¤Ï¥Ó¥Ã¥È¤´¤È¤ÎÇÓ¾ŪÏÀÍýϤò¹Ô¤¦ ±é»»»Ò¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

ÆÃÊ̤ÊÀÜÆ¬¼­¡Êprefix¡Ë¤¬¤Ä¤¤¤Æ¤¤¤Ê¤¤¿ô»ú¤Ï10¿Ê¿ô¤È¤Ê¤ê¤Þ¤¹¡£ ‘0’¤Î¤ß¤ÎÀÜÆ¬¼­¤Ï8¿Ê¿ô¤Î»Ï¤Þ¤ê¤òɽ¤·¤Þ¤¹¡£ ‘0x’¤Ï16¿Ê¿ô¤Î»Ï¤Þ¤ê¤òɽ¤·¤Þ¤¹¡£ ‘0b’¤Ï2¿Ê¿ô¤Î»Ï¤Þ¤ê¤òɽ¤·¤Þ¤¹¡£ ‘0r’¤Ï1¤«¤é36¤Þ¤Ç¤ÎǤ°Õ¤Î´ð¿ô¤Çɽ¸½¤·¤¿¿ô»ú¤Î»Ï¤Þ¤ê¤òɽ¤·¤Þ¤¹¡£ ‘0r’¤Î¸å¤Ë¤Ï10¿Ê¿ô¤Çɽ¸½¤·¤¿´ð¿ô¡¢¥³¥í¥ó¡Ê:¡Ë¡¢ ¤ª¤è¤Ó¿ôÃͤòɽ¤¹¿ô»úÎó¤ò³¤±¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£ ¤¤¤º¤ì¤Î´ð¿ô¤Çɽ¤¹¤Ë¤·¤Æ¤â¿ô»ú¤È¤·¤Æ¤Ï‘0’, ‘1’, ‘2’, …¤ò»È¤¤¡¢‘9’¤«¤é¾å¤Ï‘a’, ‘b’ … ‘z’¤Þ¤Ç¤ò ¿ô»ú¤È¤·¤Æ»È¤¤¤Þ¤¹¡£ ¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤ÎÂçʸ»ú¤È¾®Ê¸»ú¤Ï´ð¿ô¤òɽ¤¹ÀÜÆ¬¼­¤ª¤è¤Ó¿ôÃͤòɽ¤¹¿ô»úÎó¤Î¤Ê¤«¤Ç ¶èÊ̤ʤ¯»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

Éôʬ¼°¤ò¥°¥ë¡¼¥×²½¤¹¤ë¤¿¤á¤ËɬÍפʤȤ­¤Ï¥«¥Ã¥³¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ´Ø·¸±é»»»Ò¤Ï´Ø·¸¤¬¿¿¤Î¤È¤­¤Ï1¤òÊÖ¤·¡¢µ¶¤Î¤È¤­¤Ï0¤òÊÖ¤·¤Þ¤¹¡£

eval¤Î»ÈÍÑÎã¤ò¤¤¤¯¤Ä¤«¼¡¤Ëµó¤²¤Þ¤¹¡£

eval(-3 * 5)
⇒-15
eval(index(`Hello world', `llo') >= 0)
⇒1
define(`square', `eval(($1)**2)')
⇒
square(9)
⇒81
square(square(5)+1)
⇒676
define(`foo', `666')
⇒
eval(`foo'/6)
error→51.eval:14: m4: Bad expression in eval: foo/6
⇒
eval(foo/6)
⇒111

ºÇ¸å¤«¤é2ÈÖÌܤÎÎ㤬¼¨¤·¤Æ¤¤¤ë¤è¤¦¤Ëeval¤¬¥Þ¥¯¥í̾¤ò¾¡¼ê¤ËŸ³«¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ Î㤨¤½¤ì¤é¤¬Í­¸ú¤Ê¼°(¤â¤·¤¯¤ÏÍ­¸ú¤Ê¼°¤Î°ìÉô)¤ËŸ³«¤µ¤ì¤ë¤Ë¤·¤Æ¤â¤Ç¤¹¡£ ¤·¤¿¤¬¤Ã¤ÆÁ´¤Æ¤Î¥Þ¥¯¥í¤Ïeval¤ËÅϤµ¤ì¤ëÁ°¤ËŸ³«ºÑ¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

radix¤ò»ØÄꤹ¤ë¤ÈŸ³«¸å¤Î¥Æ¥­¥¹¥È¤Ç¤Ï¤½¤Î´ð¿ô¤¬»È¤ï¤ì¤Þ¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤Î´ð¿ô¤Ï10¤Ç¤¹¡£ eval¤Î·ë²Ì¤Ï¾ï¤ËÉ乿ÉÕ¤­¡Êsigned¡Ë¤ÎÃͤǤ¢¤ë¤È²ò¼á¤µ¤ì¤Þ¤¹¡£ °ú¿ôwidth¤ÏºÇÄã¸Â¤Î½ÐÎÏÉý¤ò»ØÄꤷ¤Þ¤¹¡£ Ÿ³«¸å¤Î¥Æ¥­¥¹¥È¤¬Í׵ᤵ¤ì¤¿Éý¤Ë¤Ê¤ë¤è¤¦¤Ë ·ë²Ì¤Ë¤Ï0¤¬Ëä¤áÁð¡Êzero-padded¡Ë¤È¤·¤ÆÉղ䵤ì¤Þ¤¹¡£

eval(666, 10)
⇒666
eval(666, 11)
⇒556
eval(666, 6)
⇒3030
eval(666, 6, 10)
⇒0000003030
eval(-666, 6, 10)
⇒-000003030

radix¤Ï36¤è¤êÂ礭¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£

ÁȤ߹þ¤ß¥Þ¥¯¥íeval¤Ï°ú¿ô¤òÍ¿¤¨¤¿¤È¤­¤À¤±Ç§¼±¤µ¤ì¤Þ¤¹¡£