º¸ÅëÀÇ ÅؽºÆ®·Î È®ÀåÇÏ´Â, ¾Æ¸¶µµ È£Ãâ ÀÎÀÚ¸¦ °¡Áú ¼öµµ ÀÖ´Â, ¸ÅÅ©·Î¸¸À¸·Î´Â ±×´ÙÁö ÃæºÐÇÏÁö ¸øÇÏ´Ù. ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀº ½ÇÇà-½Ã(run-time)¿¡ °áÁ¤µÇ´Â Á¶°Ç ÆÇ´Ü¿¡ ±âÃÊÇؼ ´Ù¸¥ °Íµé·Î È®ÀåÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù. ¿¹¸¦ µé¸é ¾î¶² Á¾·ùÀÇ Á¶°ÇºÎ-Á¦¾î¹®(conditional)ÀÌ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ, ¾î¶² Á¾·ùÀÇ ·çÇÁ ±¸Á¶°¡ ÀÖ¾î¼, ¾î¶² ÀÏÀ» ¿©·¯ ¹ø, ¶Ç´Â ¾î¶² Á¶°ÇÀÌ ÂüÀÎ µ¿¾È¸¸, ÇÒ ¼ö ÀÖÀ¸¸é ÁÁÀ» °ÍÀÌ´Ù.
m4
¿¡´Â µÎ °³ÀÇ ´Ù¸¥ ³»Àå Á¶°Ç¹®ÀÌ ÀÖ´Ù. ù ¹ø°´Â ifdef
ÀÌ´Ù.
ifdef(name, string-1, opt string-2)
ÀÌ°ÍÀº ¸ÅÅ©·Î°¡ ÀÌ¹Ì Á¤ÀÇ°¡ µÇ¾ú´ÂÁö ±×·¸Áö ¾ÊÀºÁö ÆÇ´ÜÇÏ´Â °ÍÀÌ´Ù.
nameÀÌ Á¤ÀÇµÈ ¸ÅÅ©·ÎÀÇ ¸íĪÀ̶ó¸é ifdef
´Â
string-1À¸·Î È®ÀåµÇ°í, ¾Æ´Ï¸é string-2·Î È®ÀåµÈ´Ù.
string-2¸¦ »ý·«ÇÑ´Ù¸é, ±×°ÍÀº (ÀϹÝÀûÀÎ ±ÔÄ¢À» µû¶ó¼) ºó ¹®ÀÚ¿ÀÌ µÈ´Ù.
ifdef(`foo', ``foo' is defined', ``foo' is not defined') =>foo is not defined define(`foo', `') => ifdef(`foo', ``foo' is defined', ``foo' is not defined') =>foo is defined
ifdef
¸ÅÅ©·Î´Â ´ÜÁö ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
Á¶°ÇºÎ-Á¦¾î¹® Áß ³ª¸ÓÁö´Â ifelse
Àε¥, ÀÌ°ÍÀº ÈξÀ °·ÂÇÏ´Ù.
ifelse
´Â ±ä ÁÖ¼®À» ¸¸µç´ÙµçÁö, ¶Ç´Â ÀϹÝÀûÀÎ if-else ¿Í °°ÀÌ
»ç¿ëÇÒ ¼öµµ ÀÖ°í ¿©·¯ °³·Î °¡Áö¸¦ »¸À» ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ÀüÀûÀ¸·Î
Á¦°øµÇ´Â ÀÎÀÚÀÇ °¹¼ö¿¡ ÀÇÁ¸ÇÑ´Ù.
ifelse(comment) ifelse(string-1, string-2, equal, opt not-equal) ifelse(string-1, string-2, equal, ...)
ÇϳªÀÇ ÀÎÀÚ¸¸À¸·Î ifelse
¸¦ »ç¿ëÇÑ´Ù¸é, ifelse ´Â ±× ÀÎÀÚ¸¦
¾ø¾Ö ¹ö¸®¸ç, ¾Æ¹«·± Ãâ·Âµµ ÇÏÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº ÁÖ¼®À» ºí·Ï´ÜÀ§·Î ¸¸µé ¶§
¿©·¯ ¹ø ¹Ýº¹ÇÏ¿© dnl
À» »ç¿ëÇÏ´Â °Í¿¡ ´ëÇÑ ´ë¾ÈÀ¸·Î½á »ç¿ëÇÏ´Â
m4
ÀÇ ÀϹÝÀûÀÎ °ü½ÀÀÌ´Ù. ÀÌ·± Ưº°ÇÑ »ç¿ë¹ýÀº GNU m4
°¡ ÀνÄÇϸç,
±×·¡¼ ÀÌ·± °æ¿ì¿¡ ÀÎÀÚ¿Í °ü·ÃµÈ °æ°í´Â °áÄÚ ¹ß»ýµÇÁö ¾Ê´Â´Ù.
¼¼ °³³ª ³× °³ÀÇ ÀÎÀÚ¸¦ Á༠ȣÃâÇÑ´Ù¸é, ifelse
´Â string-1°ú
string-2°¡ (ÇÑ ±ÛÀÚ ÇÑ ±ÛÀÚ ¸ðµÎ ´Ù) °°À» °æ¿ì´Â equal·Î È®ÀåµÇ°í
´Ù¸¥ °æ¿ì´Â not-equal·Î È®ÀåµÈ´Ù.
ifelse(foo, bar, `true') => ifelse(foo, foo, `true') =>true ifelse(foo, bar, `true', `false') =>false ifelse(foo, foo, `true', `false') =>true
ifelse
´Â ³× °³º¸´Ù ´õ ¸¹Àº ÀÎÀÚ¸¦ °¡Áú ¼ö ÀÖ´Ù. ³× °³º¸´Ù ¸¹Àº
ÀÎÀÚ°¡ ÁÖ¾îÁø´Ù¸é ifelse
´Â case
³ª switch
±¸¹®°ú
°°Àº ÀüÅëÀûÀÎ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í °°ÀÌ ÀÛµ¿ÇÑ´Ù. string-1°ú
string-2°¡ °°´Ù¸é ifelse
´Â equal·Î È®ÀåµÇ°í, ±×·¸Áö ¾ÊÀº
°æ¿ì´Â ù ¼¼ °³ÀÇ ÀÎÀÚ¸¦ °Ç³Ê¶Ù°í ¾ÕÀÇ °úÁ¤À» ´Ù½Ã µÇÇ®ÀÌ ÇÑ´Ù. ¿©±â¿¡
°£´ÜÇÑ ¿¹¸¦ µé ÇÊ¿ä°¡ ÀÖ°Ú´Ù. :
ifelse(foo, bar, `third', gnu, gnats, `sixth', `seventh') =>seventh
ÀÚ¿¬È÷, ½ÇÁ¦ÀÇ °æ¿ì´Â À§ÀÇ ¿¹Á¦º¸´Ù´Â Á» ´õ º¹ÀâÇÑ ¾ç»óÀ» ¶ì°Ô µÉ °ÍÀÌ´Ù.
ifelse
¸¦ ÀϹÝÀûÀ¸·Î ¾²´Â °æ¿ì ÁßÀÇ Çϳª´Â ´Ù¾çÇÑ Á¾·ùÀÇ ·çÇÁ¸¦
±¸ÇöÇÏ´Â ¸ÅÅ©·Î¸¦ ¸¸µé ¶§ÀÌ´Ù.
ifelse
¸ÅÅ©·Î´Â ÀÎÀÚ°¡ ÀÖÀ» ¶§¿¡¸¸ ÀνĵȴÙ.
m4
¿¡¼´Â ·çÇÁ¸¦ Á÷Á¢ Á¦°øÇÏÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ¸ÅÅ©·Î´Â
Àç±ÍÀûÀ¸·Î µÉ ¼ö ÀÖ´Ù. Àç±ÍÈ£Ãâ ´Ü°èÀÇ °¹¼ö¿¡´Â Á¦ÇÑÀÌ ¾ø´Ù. ¿©·¯ºÐÀÇ
Çϵå¿þ¾î³ª ¿î¿µÃ¼Á¦¿¡ ÀÇÇØ Á¦ÇѵǴ °ÍÀº Á¦¿ÜÇÏ°í´Â...
·çÇÁ´Â, Àç±Í È£Ãâ°ú ¾Õ¿¡¼ ¼³¸íÇÑ Á¶°Ç¹®À» ÀÌ¿ëÇÏ¿©, ÇÁ·Î±×·¡¹ÖµÉ ¼ö ÀÖ´Ù.
shift
¶ó´Â ³»Àå ¸ÅÅ©·Î°¡ ÀÖ´Â µ¥ ÀÌ°ÍÀÌ ÇÏ´Â ¿ªÇÒÀº, ¿©·¯ °¡Áö°¡ ÀÖÁö¸¸
±× Áß¿¡¼, ¸ÅÅ©·Î°¡ È£ÃâµÉ ¶§ ÁÖ¾îÁø ÀÎÀÚµéÀ»
µ¹·Á°¡¸ç µÇÇ®ÀÌ(iterate through) ÇÏ´Â µ¥¿¡ ¾²ÀδÙ.
shift(...)
°ýÈ£¾È¿¡´Â ¾î¶°ÇÑ °³¼öÀÇ ÀÎÀÚµµ ¿Ã ¼ö ÀÖÀ¸¸ç, ù ¹ø° ÀÎÀÚ¸¦ »© ¹ö¸®°í ¸ðµÎ È®ÀåµÇ¸ç °¢°¢ÀÇ ÀÎÀÚµéÀº µû¿ÈÇ¥·Î µÑ·¯½ÎÀÌ°í, ½°Ç¥·Î ºÐ¸®µÈ´Ù.
shift(bar) => shift(foo, bar, baz) =>bar,baz
½ÇÀü¿¡¼ÀÇ shift
ÀÇ »ç¿ë ¿¹´Â ´ÙÀ½ÀÇ ¸ÅÅ©·ÎÀε¥, ¿©±â¼´Â °¢°¢ÀÇ ÀÎÀÚÀÇ
¼ø¼¸¦ °Å²Ù·Î ¸¸µé°í ÀÖ´Ù.
define(`reverse', `ifelse($#, 0, , $#, 1, ``$1'', `reverse(shift($@)), `$1'')') => reverse => reverse(foo) =>foo reverse(foo, bar, gnats, and gnus) =>and gnus, gnats, bar, foo
º°·Î Èï¹ÌÀÖ´Â ¿¹´Â ¾Æ´ÏÁö¸¸, À§ÀÇ °ÍÀº shift
¿Í ifelse
¿Í
Àç±ÍÈ£Ãâ·Î °£´ÜÇÑ ·çÇÁ¸¦ ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» º¸¿©ÁØ´Ù.
(¿ªÀÚÁÖ: ÀÌ ¸Å´º¾óÀÇ ¾ÕºÎºÐ('ÀÌ ¸Å´º¾óÀÇ »ç¿ë' Àý (node À̸§Àº '¸Å´º¾ó'ÀÓ)¿¡
¹àÈù ´ë·Î forloop
´Â »ç¿ëÀÚ-Á¤ÀÇ ¸ÅÅ©·ÎÀ̸ç, Á» ´õ µÚ¿¡ ÀÌ°ÍÀ» Á¤ÀÇÇÏ´Â
¹æ¹ý¿¡ ´ëÇØ ¼³¸íÀÌ ³ª¿À¹Ç·Î ³¡±îÁö Àб⠹ٶ÷.)
ÀÌÁ¦ ·çÇÁ ¸ÅÅ©·Î forloopÀ» »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ º¸ÀÚ. ¿¹¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ ÀÌ°ÍÀº °£´ÜÇÑ ¼ýÀÚ¼¼±â¸¦ ÇÑ´Ù.
forloop(`i', 1, 8, `i ') =>1 2 3 4 5 6 7 8
ÀÎÀÚ´Â Â÷·Ê´ë·Î ¹Ýº¹ º¯¼ö, Ãʱ⠰ª, ¸¶Áö¸· °ª, ¸Å ȸ È®ÀåµÉ
ÅؽºÆ®ÀÌ´Ù. ¿©±â¿¡¼ ¸ÅÅ©·Î i
´Â ´ÜÁö ·çÇÁ³»ºÎ¿¡¼¸¸ Á¤ÀǵȴÙ.
·çÇÁ°¡ ³¡³ ÈÄ¿¡´Â ÀÌÀü¿¡ °¡Á³¾úÀ» Áöµµ ¸ð¸£´Â ±× °ªÀ» ±×´ë·Î À¯ÁöÇÑ´Ù.
For-loop´Â ´ÙÀ½°ú °°ÀÌ ÁßøµÉ ¼ö ÀÖ´Ù.
forloop(`i', 1, 4, `forloop(`j', 1, 8, `(i, j) ') ') =>(1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (1, 6) (1, 7) (1, 8) =>(2, 1) (2, 2) (2, 3) (2, 4) (2, 5) (2, 6) (2, 7) (2, 8) =>(3, 1) (3, 2) (3, 3) (3, 4) (3, 5) (3, 6) (3, 7) (3, 8) =>(4, 1) (4, 2) (4, 3) (4, 4) (4, 5) (4, 6) (4, 7) (4, 8) =>
forloop
¸ÅÅ©·ÎÀÇ ±¸ÇöÀº ¸Å¿ì °£´Ü¸í·áÇÏ´Ù. forloop
±× ÀÚü´Â
´Ü¼øÇÑ Æ÷ÀåÀÏ »ÓÀ̸ç, ±× Æ÷Àå¿¡¼´Â ù ¹ø° ÀÎÀÚÀÇ ¿¹ÀüÀÇ Á¤ÀǸ¦ ÀúÀåÇÏ°í,
³»ºÎÀûÀÎ ¸ÅÅ©·ÎÀÎ _forloop
¸¦ È£ÃâÇÏ°í, ¾Æ±î ÀúÀåÇØ ³õ¾Ò´ø ù ¹ø°
ÀÎÀÚÀÇ Á¤ÀǸ¦ µÇµ¹·Á ³õ´Â´Ù.
_forloop
¸ÅÅ©·Î´Â ³× ¹ø° ÀÎÀÚ¸¦ ÇÑ ¹ø È®ÀåÇÑ ÈÄ, (·çÇÁ°¡) ³¡³µ´ÂÁö¸¦
°Ë»çÇÑ´Ù. ¾ÆÁ÷ ³¡³ªÁö ¾Ê¾Ñ´Ù¸é, (¹Ì¸® Á¤ÀÇµÈ ¸ÅÅ©·Î incr
À» ÀÌ¿ëÇÏ¿©,)
¹Ýº¹ º¯¼ö¸¦ Áõ°¡½ÃÅ°°í, ÀÚ½ÅÀ» Àç±ÍÈ£Ãâ ÇÑ´Ù. (see section Áõ°¡¿Í °¨¼Ò ¿¬»êÀÚ)
¿©±â¿¡ forloop
¸¦ Á¤ÀÇÇÑ À¯¿ëÇÑ ¸ÅÅ©·Î°¡ ÀÖ´Ù.
define(`forloop', `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', `$4')popdef(`$1')') define(`_forloop', `$4`'ifelse($1, `$3', , `define(`$1', incr($1))_forloop(`$1', `$2', `$3', `$4')')')
µû¿ÈÇ¥¸¦ ÁÖÀÇ ±í°Ô »ç¿ëÇÑ °ÍÀ» ´« ¿©°Ü º¸¶ó. ¼¼ °³ÀÇ ÀÎÀÚ¸¸ÀÌ µû¿ÈÇ¥°¡ ¾ø´Âµ¥, °¢°¢¿¡´Â ³ª¸§´ë·Î ÀÌÀ¯°¡ ÀÖ´Ù. ÀÌµé ¼¼ °³ÀÇ ÀÎÀÚ¿¡ ¿Ö µû¿ÈÇ¥°¡ ¾ø´Â Áö¸¦ ¾Ë·Á¸é, µû¿ÈÇ¥·Î ¹¾ú´Ù¸é ¾î¶² ÀÏÀÌ ÀϾ´Â Áö¸¦ »ìÆ캸¸é µÈ´Ù.
ÀÌÁ¦, ÀÌµé µÎ ¸ÅÅ©·Î°¡ À¯¿ëÇϱâ´Â ÇÒ Áö¶óµµ, ±×·¡µµ ÀϹÝÀûÀÎ »ç¿ë¿¡´Â ÃæºÐÈ÷ Æ°Æ°ÇÏÁö´Â ¾Ê´Ù. ±×°Íµé¿¡´Â ¸¶Áö¸· °ªÀÌ Ãʱ⠰ªº¸´Ù ÀÛÀ» ¶§¶óµç°¡, ù ¹ø° ÀÎÀÚ°¡ ¸íĪÀÌ µÉ ¼ö ¾ø´Â °ÍÀÌ ÁÖ¾îÁú °æ¿ì¿Í °°Àº ±âÃÊÀûÀÎ ¿À·ù 󸮰¡ ¹Ì¾àÇÏ´Ù. ÀÌµé ¿À·ù¸¦ ¹Ù·Î Àâ´Â ÀÏÀº µ¶Àڵ鿡°Ô ¿¬½À¹®Á¦·Î ³²°ÜµÐ´Ù.
Go to the first, previous, next, last section, table of contents.