¸ÅÅ©·Î´Â ¿©·¯ ´Ù¸¥ ¹æ¹ýÀ¸·Î Á¤ÀÇ, ÀçÁ¤Àǵǰųª »èÁ¦µÉ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÀÌÀüÀÇ °ªÀ» ÀÒ¾î¹ö¸®Áö ¾Ê°í ¸ÅÅ©·Î¸¦ ÀçÁ¤ÀÇÇÏ´Â °ÍÀÌ °¡´ÉÇÏ¸ç ³ªÁß¿¡ ´Ù½Ã µÇµ¹·Á ³õÀ» ¼öµµ ÀÖ´Ù.
Á¤ÀÇÇϰųª ÀçÁ¤ÀÇÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀº ³»Àå ¸ÅÅ©·ÎÀÎ define
À»
»ç¿ëÇÏ´Â °ÍÀÌ´Ù.
define(name [, expansion])
À§¿¡¼ nameÀº expansionÀ¸·Î È®ÀåµÇ´Â °ÍÀ¸·Î Á¤ÀǵȴÙ. ¸¸ÀÏ expansionÀÌ ÁÖ¾îÁöÁö ¾Ê´Â´Ù¸é nameÀº ÅÖ ºó °ÍÀ¸·Î Á¤ÀǵȴÙ.
defineÀº È®ÀåµÇÁö ¾Ê´Â´Ù.
´ÙÀ½ÀÇ ¿¹´Â ¸ÅÅ©·Î foo¸¦ ÅؽºÆ® `Hello World.'·Î Á¤ÀÇÇÑ´Ù.
define(`foo', `Hello world.') => foo =>Hello world.
À§¿¡¼ ºó ÁÙÀÌ ³ªÅ¸³ª´Â °ÍÀº ÁٹٲÞ(newline) ¹®ÀÚ´Â ¸ÅÅ©·Î Á¤ÀÇÀÇ ÀϺκÐÀÌ
¾Æ´Ï¶ó¼ Ãâ·ÂÀ¸·Î º¹»çµÈ °ÍÀÌ´Ù. ÀÌ°ÍÀº ¸ÅÅ©·Î dnl
À» »ç¿ëÇÏ¿© Á¦°ÅÇÒ
¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ °ÍÀº See section ÀԷ¿¡¼ °ø¹é¹®ÀÚ Á¦°ÅÇϱâ.
define
¸ÅÅ©·Î´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
¸ÅÅ©·Î´Â ÀÎÀÚ¸¦ °¡Áú¼ö ÀÖ´Ù. n¹ø° ÀÎÀÚ´Â È®Àå ÅؽºÆ®¿¡¼
$n
À¸·Î »ç¿ëÇϸç ÀÌ°ÍÀº ¸ÅÅ©·Î°¡ È®ÀåµÉ ¶§ n¹ø°ÀÇ ½ÇÁ¦ÀûÀÎ
ÀÎÀÚ·Î ±³Ã¼µÈ´Ù. ¿©±â¿¡ µÎ °³ÀÇ ÀÎÀÚ¸¦ °¡Áö´Â ¸ÅÅ©·ÎÀÇ ¿¹Á¦°¡ ÀÖ´Ù.
ÀÌ°ÍÀº ´Ü¼øÈ÷ µÎ °³ÀÇ ÀÎÀÚÀÇ ¼ø¼¸¦ ¸Â¹Ù²Ù´Â °ÍÀÌ´Ù.
define(`exch', `$2, $1') => exch(arg1, arg2) =>arg2, arg1
¸¸¾à define
À¸·Î Àü´ÞµÇ´Â ÀÎÀÚ¸¦ ¸Â¹Ù²Ù°íÀÚ ÇÑ´Ù¸é ¾Æ·¡ ¿¹¿¡¼¿Í °°ÀÌ
»ç¿ëÇÒ ¼ö ÀÖ´Ù.
define(`exch', `$2, $1') => define(exch(``expansion text'', ``macro'')) => macro =>expansion text
µû¿ÈÇ¥¸¦ µÎ °ãÀ¸·Î µÑ·¯½Ñ ÀÌÀ¯¿¡ ´ëÇÑ ¼³¸íÀ» º¸·Á¸é See section ¸ÅÅ©·ÎÀÇ ÀÎÀÚ¸¦ µû¿ÈÇ¥·Î ¹±â.
GNU m4
´Â `$' ´ÙÀ½¿¡ ÇÑ ÀÚ¸´¼ö ÀÌ»óÀÇ ¼ýÀÚ¸¦ ¾µ ¼ö ÀÖ´Ù.
¸ÅÅ©·Î´Â ÀÎÀÚÀÇ ¼ö¿¡´Â Á¦ÇÑÀÌ ¾ø´Ù. ÀÌ Á¡ÀÌ ÇÑ ÀÚ¸´¼ö¸¸ ¾µ ¼ö ÀÖ´Â UNIX
¹öÀüÀÇ m4
¿Í´Â ´Ù¸¥ Á¡ÀÌ´Ù.
Ưº°ÇÑ °æ¿ì·Î, 0¹ø° ÀÎÀÚ¸¦ ¶æÇÏ´Â $0
Àº Ç×»ó ¸ÅÅ©·Î ÀÚ½ÅÀÇ À̸§À¸·Î
È®ÀåµÈ´Ù´Â Á¡ÀÌ´Ù.
define(`test', ``Macro name: $0'') => test =>Macro name: test
¸¸ÀÏ È®ÀåµÈ ÅؽºÆ®¾È¿¡ µû¿ÈÇ¥·Î µÑ·¯½ÎÀÎ ÅؽºÆ®¸¦ ³Ö°í ½Í´Ù¸é, ±× µû¿ÈÇ¥´Â µû¿ÈÇ¥·Î µÑ·¯½ÎÀÎ ¹®ÀÚ¿ ¼Ó¿¡ ³»ÀåµÇ¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ,
define(`foo', `This is macro `foo'.') => foo =>This is macro foo.
È®ÀåµÈ ÅؽºÆ® ¾È¿¡ ÀÖ´Â `foo'´Â È®ÀåµÇÁö ¾Ê´Â´Ù. ±×°ÍÀÌ µû¿ÈÇ¥·Î ¹¿©Á® ÀÖ´Â ÇÑ, ´õ ÀÌ»ó ¸íĪÀÌ ¾Æ´Ï´Ù.
½ÇÁ¦·Î ÁÖ¾îÁø ÀÎÀÚÀÇ °³¼ö¿Í ½ÇÁ¦·Î ÁÖ¾îÁø ÀÎÀÚ Àüü¸¦ Ç¥ÇöÇÒ ¼ö Àִ Ưº°ÇÑ Ç¥±â¹ýÀÌ ÀÖ´Ù.
¸ÅÅ©·Î È£ÃâÇÒ ¶§¿¡ ½ÇÁ¦·Î ÁÖ¾îÁø ÀÎÀÚÀÇ °³¼ö´Â È®Àå ÅؽºÆ®¿¡¼ $#
À¸·Î
Ç¥½ÃµÈ´Ù. ±×·¡¼, ÁÖ¾îÁø ÀÎÀÚÀÇ °³¼ö¸¦ º¸¿©ÁÖ´Â ¸ÅÅ©·Î´Â ´ÙÀ½°ú °°ÀÌ ¸¸µç´Ù.
define(`nargs', `$#') => nargs =>0 nargs() =>1 nargs(arg1, arg2, arg3) =>3
$*
Ç¥±â¹ýÀº È®ÀåµÈ ÅؽºÆ®¿¡¼ ¸ðµç ½ÇÁ¦·Î ÁÖ¾îÁø ÀÎÀÚ¸¦ ³ªÅ¸³¾ ¼ö
ÀÖµµ·Ï ÇØÁÖ¸ç, µû¿ÈÇ¥ ¾øÀÌ, »çÀÌ¿¡ ½°Ç¥°¡ ¿Â´Ù. ¿¹¸¦ µé¸é
define(`echo', `$*') => echo(arg1, arg2, arg3 , arg4) =>arg1,arg2,arg3 ,arg4
°¡²û °¢°¢ÀÇ ÀÎÀÚ¸¦ µû¿ÈÇ¥·Î µÑ·¯½Ò Çʿ伺ÀÌ ÀÖ´Ù¸é $@
Ç¥±â¹ýÀ»
»ç¿ëÇÏ¸é µÈ´Ù. ÀÌ°ÍÀº °¢°¢ÀÇ ÀÎÀÚ¸¦ µû¿ÈÇ¥·Î µÑ·¯½Ñ´Ù´Â °Í¸¸ Á¦¿ÜÇϸé
$*
°ú °°´Ù. °£´ÜÇÑ ¿¹¸¦ Çϳª µé¾îº¸ÀÚ.
define(`echo', `$@') => echo(arg1, arg2, arg3 , arg4) =>arg1,arg2,arg3 ,arg4
¾î ÀÌ·±, µû¿ÈÇ¥µéÀº ´Ù ¾îµð·Î °¬Áö? ¹°·Ð À̰͵éÀº È®ÀåµÈ ÅؽºÆ®¸¦
m4
°¡ ´Ù½Ã ÀÐÀ» ¶§¿¡ ´Ù »ïÄÑÁ® ¹ö·È´Ù. ±× Â÷À̸¦ º¸¿© ÁÖ·Á¸é
´ÙÀ½°ú °°ÀÌ Çغ¸ÀÚ.
define(`echo1', `$*') => define(`echo2', `$@') => define(`foo', `This is macro `foo'.') => echo1(foo) =>This is macro This is macro foo.. echo2(foo) =>This is macro foo.
ÀÌÇØ°¡ ÀßµÇÁö ¾Ê´Â´Ù¸é, See section ¸ÅÅ©·Î È£ÃâÀ» ÃßÀûÇϱâ.
È®ÀåµÈ ÅؽºÆ®¿¡¼ÀÇ `$' ±âÈ£ ´ÙÀ½¿¡ m4
°¡ ÀÌÇØÇÏ´Â ¾î¶² ±âÈ£µµ
µû¶ó¿ÀÁö ¾Ê´Â´Ù¸é, ÀÌ°ÍÀ» ´Ù¸¥ ÀÏ¹Ý ÅؽºÆ®Ã³·³ ¸ÅÅ©·Î È®Àå °á°ú¿¡ ´Ü¼øÈ÷ º¹»çÇØ
³Ö´Â´Ù.
define(`foo', `$$$ hello $$$') => foo =>$$$ hello $$$
¸ÅÅ©·Î¸¦ ½á¼ `$12'¿Í °°Àº °ÍÀ¸·Î È®ÀåÇϱ⸦ ¹Ù¶õ´Ù¸é, $
´ÙÀ½¿¡ ÇѽÖÀÇ µû¿ÈÇ¥¸¦ ½áÁÖ¸é µÈ´Ù. ÀÌ°ÍÀº m4
·Î ÇÏ¿©±Ý
$
ºÎÈ£¸¦, ÀÎÀÚ¸¦ ³ªÅ¸³»´Â ±âÈ£·Î, Çؼ®ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
ÇϳªÀÇ ¸ÅÅ©·Î Á¤ÀÇ´Â undefine
À¸·Î »èÁ¦µÉ ¼ö ÀÖ´Ù.
undefine(name)
nameÀº »èÁ¦µÉ ¸ÅÅ©·Î ¸íĪÀÌ´Ù. ¸ÅÅ©·Î ¸íĪÀº º¸Åë µû¿ÈÇ¥·Î µÑ·¯½Î´Â °ÍÀÌ ÇÊ¿äÇѵ¥, ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é È®ÀåµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù.
undefine
Àº È®ÀåµÇÁö ¾Ê´Â´Ù.
foo =>foo define(`foo', `expansion text') => foo =>expansion text undefine(`foo') => foo =>foo
nameÀÌ ¾Æ¹«·± ¸ÅÅ©·Î Á¤Àǵµ °¡ÁöÁö ¾Ê¾Ò´Ù°í Çصµ ¿¡·¯°¡ ¾Æ´Ï¸ç,
±× °æ¿ì¿¡ undefine
Àº ¾Æ¹« Àϵµ ÇÏÁö ¾Ê´Â´Ù.
undefine
¸ÅÅ©·Î´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
ÀÌ¹Ì Á¤ÀÇµÈ ¸ÅÅ©·Î´Â ±× ¸íĪÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ³»Àå ¸ÅÅ©·Î defn
ÀÌ
ÀÌ·± ÀÏÀ» ÇÑ´Ù.
defn(name)
ÀÌ°ÍÀº µû¿ÈÇ¥°¡ ºÙÀº nameÀÇ Á¤ÀÇ·Î È®ÀåµÈ´Ù. Á¤ÀÇµÈ ¸ÅÅ©·Î°¡ ¾Æ´Ñ °ÍÀ» ÀÎÀÚ·Î ³ÖÀ¸¸é, È®ÀåÀÌ µÇÁö ¾Ê´Â´Ù.
nameÀÌ »ç¿ëÀÚ-Á¤ÀÇ ¸ÅÅ©·Î¶ó¸é, µû¿ÈÇ¥·Î µÑ·¯½ÎÀÎ Á¤ÀÇ´Â ´Ü¼øÈ÷
±× ¸ÅÅ©·ÎÀÇ È®Àå °á°úÀÎ ÅؽºÆ®¸¦ µû¿ÈÇ¥·Î µÑ·¯½Ñ °ÍÀ¸·Î µÈ´Ù. nameÀÌ
³»Àå ¸ÅÅ©·Î¶ó¸é ±× È®ÀåÀº Ưº°ÇÑ ÅäÅ«ÀÌ µÇ´Âµ¥, ±×°ÍÀº ±× ³»Àå ¸ÅÅ©·ÎÀÇ
³»ºÎÀûÀÎ Á¤ÀǸ¦ °¡¸®Å°´Â °ÍÀÌ´Ù. ÀÌ ÅäÅ«Àº define
(±×¸®°í
pushdef
)ÀÇ µÎ ¹ø° ÀÎÀÚ·Î ¾²¿´À» ¶§¿¡¸¸ Àǹ̰¡ ÀÖ°í, ´Ù¸¥ ¹®¸Æ¿¡¼
»ç¿ëµÇ¾ú´Ù¸é ¹«½ÃµÈ´Ù.
ÀÌÇØÇϱ⿡ °¡Àå ÁÁÀº ¹æ¹ýÀº »ç¿ë ¿¹¸¦ º¸´Â °ÍÀÌ´Ù.
¾Æ·¡´Â undefine
À» zap
À¸·Î ¹Ù²Ù´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.
define(`zap', defn(`undefine')) => zap(`undefine') => undefine(`zap') =>undefine(zap)
ÀÌ·± ½ÄÀ¸·Î, defn
Àº ¸ÅÅ©·Î Á¤Àdzª ³»Àå ¸ÅÅ©·ÎÀÇ Á¤ÀǸ¦ º¹»çÇÏ´Â
µ¥¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿ø·¡ÀÇ ¸ÅÅ©·Î°¡ Á¦°ÅµÇ¾ú´Ù ÇÒÁö¶óµµ »õ·Î ºÙ¿©Áø À̸§Àº
±× Á¤ÀÇ¿¡ Á¢±ÙÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
defn
¸ÅÅ©·Î´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
¸ÅÅ©·Î¸¦ Àӽ÷Π´Ù½Ã Á¤ÀÇÇÏ°í, ÀÌÀüÀÇ Á¤ÀÇ·Î ³ªÁß¿¡ µÇµ¹·Á ³õÀ» ¼ö ÀÖ´Ù.
ÀÌ·¯ÇÑ ÀÏÀ» ÇÏ´Â °ÍÀº ³»Àå ¸ÅÅ©·Î pushdef
¿Í popdef
ÀÌ´Ù.
pushdef(name [, expansion]) popdef(name)
ÀÌ°ÍÀº define
°ú undefine
»çÀÌÀÇ °ü°è¿Í ¾ÆÁÖ À¯»çÇÏ´Ù.
ÀÌ ¸ÅÅ©·Î´Â ½ºÅðú ºñ½ÁÇÏ°Ô ÀÛµ¿ÇÑ´Ù. ¾î¶² ÇϳªÀÇ ¸ÅÅ©·Î°¡ pushdef
¸¦
»ç¿ëÇÏ¿© Àӽ÷ΠÀçÁ¤Àǵǰí, ±×°ÍÀº ÀÌ¹Ì Á¸ÀçÇÏ´Â nameÀÇ Á¤ÀǸ¦ ´Ù¸¥
°ÍÀ¸·Î º¯°æÇÏ´Â ÇÑÆí, »õ·Î¿î Á¤ÀÇ°¡ ¼³Ä¡µÇ±â Àü¿¡, ¿¹ÀüÀÇ Á¤ÀǸ¦ ÀúÀåÇÑ´Ù.
¿¹ÀüÀÇ Á¤ÀÇ°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â, pushdef
´Â define
°ú
Á¤È®È÷ °°Àº ÇൿÀ» ÇÑ´Ù.
¾î¶² ÇϳªÀÇ ¸ÅÅ©·Î°¡ ¿©·¯°³ÀÇ Á¤ÀǸ¦ °¡Áö°í ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. (´ç¿¬È÷ ±×
Áß ÇϳªÀÇ Á¤ÀǸ¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.) °¡Àå ²À´ë±âÀÇ Á¤ÀÇ´Â
popdef
·Î Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ¿¹ÀüÀÇ Á¤ÀÇ°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â,
popdef
´Â undefine
°ú Á¤È®È÷ °°Àº ÇൿÀ» ÇÑ´Ù.
define(`foo', `Expansion one.') => foo =>Expansion one. pushdef(`foo', `Expansion two.') => foo =>Expansion two. popdef(`foo') => foo =>Expansion one. popdef(`foo') => foo =>foo
¿©·¯°³ÀÇ Á¤ÀÇ°¡ ÀÖ´Â ¾î¶² ÇϳªÀÇ ¸ÅÅ©·Î°¡ define
À¸·Î ÀçÁ¤Àǵȴٸé,
ÃÖ»óÀ§ÀÇ Á¤ÀÇ´Â »õ·Î¿î Á¤ÀÇ·Î ´ëÄ¡µÈ´Ù. ±× Á¤ÀÇ°¡ undefine
À¸·Î
Á¦°ÅµÈ´Ù¸é, ÃÖ»óÀ§ Çϳª¸¸ÀÌ ¾Æ´Ñ, ¸ðµç Á¤ÀÇ°¡ »ç¶óÁö°Ô µÈ´Ù.
define(`foo', `Expansion one.') => foo =>Expansion one. pushdef(`foo', `Expansion two.') => foo =>Expansion two. define(`foo', `Second expansion two.') => foo =>Second expansion two. undefine(`foo') => foo =>foo
³»Àå ¸ÅÅ©·Î pushdef
¿Í defn
À» ½á¼ Àӽ÷ΠÀçÁ¤ÀÇÇÏ´Â °ÍÀÌ
°¡´ÉÇÏ´Ù.
pushdef
¿Í popdef
¸ÅÅ©·Î´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
¾î¶² ¸ÅÅ©·ÎµçÁö indir
·Î °£Á¢ÀûÀ¸·Î È£ÃâÇÒ ¼ö ÀÖ´Ù.
indir(name, ...)
ÀÌ°ÍÀº ¸ÅÅ©·Î nameÀ» È£ÃâÇÏ°Ô µÇ¸ç, ±×°Í¿¡ ³ª¸ÓÁö ÀÎÀÚ°¡ °Ç³×Áø´Ù.
ÀÌ°ÍÀº ±ÔÄ¢¿¡ ¾î±ß³ª´Â ¸íĪ(define
Àº ±×·¯ÇÑ ¸íĪÀÌ Á¤ÀǵǴ °ÍÀ»
Çã¿ëÇÑ´Ù)À» °¡Áø ¸ÅÅ©·Î È£Ãâ¿¡ »ç¿ëµÈ´Ù.
define(`$$internal$macro', `Internal macro (name `$0')') => $$internal$macro =>$$internal$macro indir(`$$internal$macro') =>Internal macro (name $$internal$macro)
¿©±â¿¡¼ÀÇ ¿äÁ¡Àº Ä¿´Ù¶õ ¸ÅÅ©·Î ÆÐÅ°Áö¿¡¼ ±× ³»ºÎ¿¡¼¸¸ ¾²·Á°í »ç»ç·ÎÀÌ
Á¤ÀÇÇÑ ¸ÅÅ©·Î°¡ ÀÖÀ» ¼ö Àִµ¥, (¿ªÀÚÁÖ: ±×°ÍÀ» À§¿¡¼ Á¤ÀÇÇÏ´Â °Í°ú °°ÀÌ
ÀϺη¯ ±ÔÄ¢¿¡ ¾î±ß³ª´Â À̸§À¸·Î Á¤ÀÇÇÑ´Ù°í ÇßÀ» ¶§,) ±×°ÍÀÌ (¿ªÀÚÁÖ: ÆÐÅ°Áö
¿ÜºÎ¿¡¼) »ç°í·Î ÀÎÇØ È£ÃâµÇ´Â ÀÏÀº ¾øÀ» °ÍÀ̶ó´Â °ÍÀÌ´Ù. ±×°ÍµéÀº
¹Ýµå½Ã ³»Àå ¸ÅÅ©·Î indir
·Î¸¸ È£ÃâµÉ ¼ö ÀÖÀ» °ÍÀ̱â
¶§¹®ÀÌ´Ù.
³»Àå ¸ÅÅ©·Î´Â builtin
À» »ç¿ëÇÏ¿© °£Á¢ÀûÀ¸·Î È£ÃâÇÒ ¼ö ÀÖ´Ù.
builtin(name, ...)
ÀÌ·¸°Ô ÇÏ¸é ³»Àå ¸ÅÅ©·Î nameÀ» È£ÃâÇÏ°Ô µÇ°í, °Å±â¿¡ ±× ³ª¸ÓÁö ÀÎÀÚ°¡ °Ç³×Áø´Ù. ÀÌ·¸°Ô ¾µ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì¶õ, ¸¸¾à nameÀÇ ¿ø·¡ Á¤ÀÇ¿¡ ´Ù¸¥ Á¤ÀÇ°¡ µ¤¾î ¾º¿öÁ® ¹ö¸° »óÅÂÀÏ ¶§ (¿ªÀÚÁÖ: ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¿ø·¡ÀÇ Á¤ÀǷΠȣÃâÀ» ÇÏ°í ½ÍÀ» ¶§) ÀÌ·¸°Ô »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
builtin
¸ÅÅ©·Î´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
Go to the first, previous, next, last section, table of contents.