Next: , Previous: Invocation, Up: Macros   [Contents][Index]


3.2 ¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤òÍÞÀ©¤¹¤ë

Àè¹Ô¤¹¤ë¥Þ¥¯¥í¥×¥í¥»¥Ã¥µ(Stratchey¤ÎGPM¤Ê¤É)¤ËÈæ¤Ù¤Æ¡¢ m4¸À¸ì¤Î³×¿·Åª¤Ê¤È¤³¤í¤Ï¡¢ ÀèÆ¬¤ËÆÃÊ̤Êʸ»ú¤ò¤Ä¤±¤Æ½ñ¤¯¤È¤¤¤Ã¤¿¤³¤È¤ò¤·¤Ê¤¯¤Æ¤â¡¢¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤ò¼±Ê̤Ǥ­¤ëǽÎϤǤ¹¡£ ¤³¤Îµ¡Ç½¤Ï¿¤¯¤Î¾ì¹ç¤Ë¤ª¤¤¤ÆÊØÍø¤Ê¤Î¤Ç¤¹¤¬¡¢ ¤È¤­¤Ë¤ÏÉÔɬÍפʥޥ¯¥í¤Î¸Æ¤Ó½Ð¤·¤Î¸¶°ø¤È¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ ¤½¤³¤Ç¡¢GNU m4¤Ë¤Ï̾Á°¡Êname¡Ë¤¬¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤È¤·¤ÆÇ§¼±¤µ¤ì¤ë¤Î¤ò ÍÞÀ©¤¹¤ë¤¤¤¯¤Ä¤«¤Îµ¡¹½¤ä¥Æ¥¯¥Ë¥Ã¥¯¤¬¤¢¤ê¤Þ¤¹¡£

¤Þ¤º¡¢Â¿¤¯¤ÎÁȤ߹þ¤ß¥Þ¥¯¥í¤Ï°ú¿ô¤Ê¤·¤Ç¸Æ¤Ó½Ð¤·¤Æ¤â°ÕÌ£¤¬¤Ê¤¤¤Î¤Ç¡¢ ¤½¤ì¤é¤Î̾Á°¤Îľ¸å¤Ë³«¤­¥«¥Ã¥³¤¬¤Ê¤¤¤È¤­¤Ï¡¢ÁȤ߹þ¤ß¥Þ¥¯¥í¤Ï¸Æ¤Ó½Ð¤µ¤ì¤Þ¤»¤ó¡£ ¤³¤ì¤Ë¤è¤Ã¤Æ¡¢‘include’¤ä‘eval’¤¬¥Þ¥¯¥í¤È¤·¤ÆÇ§¼±¤µ¤ì¤Æ¤·¤Þ¤¦ ¤È¤¤¤Ã¤¿¤è¤¯¤¢¤ë¥±¡¼¥¹¤ËÂнè¤Ç¤­¤Þ¤¹¡£ ¸å¤Û¤É¡¢¤³¤Îʸ½ñ¤Ë½Ð¤Æ¤¯¤ë “¤³¤Î¥Þ¥¯¥í¤Ï°ú¿ô¤òÍ¿¤¨¤¿¤È¤­¤À¤±Ç§¼±¤µ¤ì¤Þ¤¹”¤È¤¤¤¦Ê¸¤Ï¡¢ ¤³¤Îưºî¤ò°ÕÌ£¤·¤Þ¤¹¡£

¤Þ¤¿¡¢¥³¥Þ¥ó¥É¥ª¥×¥·¥ç¥ó(--prefix-builtins, ¤Þ¤¿¤Ï-P) ¤ò»È¤¦¤È¡¢ÁȤ߹þ¤ß¥Þ¥¯¥í¤ò¸Æ¤Ó½Ð¤¹¤È¤­¤Ï¡¢ ¤½¤Î̾Á°¤ÎÀèÆ¬¤Ë‘m4_’¤ò¤Ä¤±¤Ê¤±¤ì¤Ðǧ¼±¤µ¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£ ¤¿¤È¤¨¤Ðm4_dnl¤ä¡¢¤µ¤é¤Ë¤Ïm4_m4exit¤È ½ñ¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£ ¤Á¤Ê¤ß¤Ë¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¥æ¡¼¥¶ÄêµÁ¤Î¥Þ¥¯¥í¤Ë¤Ï²¿¤Î¸ú²Ì¤â¤â¤Á¤Þ¤»¤ó¡£

changewordµ¡Ç½¤¬¥³¥ó¥Ñ¥¤¥ë»þ¤ËÁȤ߹þ¤Þ¤ì¤¿m4¤ò »ÈÍѤ·¤Æ¤¤¤ë¤È¤­¤Ï¡¢¥Þ¥¯¥í̾¤Îǧ¼±¤Ë»È¤ï¤ì¤ë»ú¶ç¹½À®µ¬Â§¤ò¤Ï¤ë¤«¤Ë½ÀÆð¤Ë »ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤³¤Îµ¬Â§¤ÏÁȤ߹þ¤ß¥Þ¥¯¥í¤È¥æ¡¼¥¶ÄêµÁ¥Þ¥¯¥íξÊý¤Î̾Á°¤ËºîÍѤ·¤Þ¤¹¡£ ¤³¤Î»î¸³Åª¤Êµ¡Ç½¤Î¾ÜºÙ¤ÏSee Changeword¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤â¤Á¤í¤ó¡¢¤¢¤ë̾Á°¤¬¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤È¤·¤ÆÇ§¼±¤µ¤ì¤ë¤Î¤òËɤ°¡¢ ¤â¤Ã¤È¤âñ½ã¤ÊÊýË¡¤Ï¡¢¤½¤Î̾Á°¤ò¥¯¥©¡¼¥È¤¹¤ë(°úÍÑÉä¤Ç°Ï¤à)¤³¤È¤Ç¤¹¡£ ¤³¤ÎÀá¤Î»Ä¤êÉôʬ¤Ç¤Ï¡¢¥¯¥©¡¼¥È¤¹¤ë¤³¤È¤¬¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤Ë¤É¤Î¤è¤¦¤Ë ±Æ¶Á¤¹¤ë¤Î¤«¡¢¤Þ¤¿¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤òÍÞÀ©¤¹¤ë¤Ë¤Ï ¤½¤ì¤ò¤É¤Î¤è¤¦¤Ë»È¤¨¤Ð¤è¤¤¤Î¤«¤ò¡¢¤â¤¦¤¹¤³¤·¾Ü¤·¤¯¸«¤Æ¤¤¤­¤Þ¤¹¡£

¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤òÍÞÀ©¤·¤¿¤¤¤È¤­¤Ï̾Á°Á´ÂΤò¥¯¥©¡¼¥È¤¹¤ë¤Î¤¬ÉáÄ̤Ǥ¹¤¬¡¢ ̾Á°¤Î¿ôʸ»ú¤ò¥¯¥©¡¼¥È¤¹¤ë¤À¤±¤Ç¤âƱ¤¸¸ú²Ì¤¬¤¢¤ê¤Þ¤¹¡£ ¤Þ¤¿¡¢¶õʸ»úÎó¤ò¥¯¥©¡¼¥È¤¹¤ë¤À¤±¤Ç¤â¤è¤¤¤Î¤Ç¤¹¤¬¡¢ ¤³¤Î¾ì¹ç¤Ï̾Á°¤ÎÆâÉô¤Ç¤Ê¤¤¤È¸ú²Ì¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¿¤È¤¨¤Ð¡¢

`divert'
`d'ivert
di`ver't
div`'ert

¤³¤ì¤é¤Î·ë²Ì¤Ï¤¹¤Ù¤ÆÊ¸»úÎó‘divert’¤È¤Ê¤ê¤Þ¤¹¤¬¡¢

`'divert
divert`'

¤³¤Á¤é¤ÏξÊý¤È¤âÁȤ߹þ¤ß¥Þ¥¯¥ídivert¤¬¸Æ¤Ð¤ì¤Þ¤¹¡£

¥Þ¥¯¥í¤òɾ²Á¤·¤ÆÀ¸¤¸¤¿½ÐÎϤϾï¤ËºÆÁöºº¡Êrescan¡Ë¤µ¤ì¤Þ¤¹¡£ ¼¡¤ÎÎã¤Ç¤Ï¡¢m4¤Ë‘substr(abcde, 3, 2)¤òÆþÎϤȤ·¤Æ Í¿¤¨¤¿¤È¤­¤ÈƱÍͤˡ¢Ê¸»úÎó‘de’¤¬À¸À®¤µ¤ì¤Þ¤¹¡£

define(`x', `substr(ab')
define(`y', `cde, 3, 2)')
x`'y

¥¯¥©¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¡Êquoted string¡Ë¤Îξü¤Ë¤¢¤ë¥¯¥©¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎó¤Ï¡¢ ¥Þ¥¯¥í̾¤È¤·¤ÆÇ§¼±¤µ¤ì¤ëÂоݤȤʤê¤Þ¤¹¡£ ¼¡¤ÎÎã¤Ç¤Ï¡¢¶õʸ»úÎó¤ò¥¯¥©¡¼¥È¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ dnl¥Þ¥¯¥í¤¬Ç§¼±¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

define(`macro', `di$1')
macro(v)`'dnl

¤â¤·°úÍÑÉ䤬¤Ê¤«¤Ã¤¿¤é¡¢ ʸ»úÎó‘divdnl’¤È¤½¤ì¤Ë³¤¯²þ¹Ôʸ»ú¤¬À¸À®¤µ¤ì¤ë¤À¤±¤Ç¤·¤ç¤¦¡£

¥¯¥©¡¼¥È¤¹¤ë¤³¤È¤Ç¡¢¥Þ¥¯¥íŸ³«¤Ë¤è¤ëʸ»úÎó¤È¤½¤Î¼þ°Ï¤Îʸ»ú¤òÏ¢·ë¤·¤¿¤â¤Î¤¬ ¥Þ¥¯¥í¤Î̾Á°¤È¤·¤ÆÇ§¼±¤µ¤ì¤ë¤Î¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢

define(`macro', `di$1')
macro(v)`ert'

¤³¤ÎÆþÎϤ«¤é¤Ï¡¢Ê¸»úÎó‘divert’¤¬À¸¤ß½Ð¤µ¤ì¤Þ¤¹¡£ ¤â¤·°úÍÑÉ䤬¤Ê¤±¤ì¤Ð¡¢ÁȤ߹þ¤ß¥Þ¥¯¥ídivert¤¬¸Æ¤Ó¤À¤µ¤ì¤ë¤Ç¤·¤ç¤¦¡£