¸¶ºî: Jörg Wunsch <joerg@FreeBSD.ORG>
Ìõ: ÆâÀî ´î¾Ï <yoshiaki@kt.rim.or.jp>. 29 December 1996.
Note: ¤³¤Î¾Ï¤ò¤ªÆÉ¤ß¤Ë¤Ê¤ëÁ°¤Ë FreeBSD ¥«¡¼¥Í¥ë¤Î¥³¥ó¥Õ¥£¥°¥ì¡¼¥·¥ç¥ó ¤Î¾Ï¤ÎÆâÍÆ¤ò Íý²ò¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤.
¥«¡¼¥Í¥ë¥ª¥×¥·¥ç¥ó¤Î»È¤¤Êý¤Ï´ðËÜŪ¤Ë¤Ï FreeBSD ¥«¡¼¥Í¥ë¤Î¥³¥ó¥Õ¥£¥°¥ì¡¼¥·¥ç¥ó ¤Î¾Ï¤Ë½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹. ¤½¤³¤Ë¤Ï ``ÅÁÅýŪ¤Ê·Á¼°'' ¤È ``¿·¤·¤¤·Á¼°'' ¤Î¥ª¥×¥·¥ç¥ó¤ÎÀâÌÀ¤¬¤¢¤ê¤Þ¤¹. ¤¹¤Ù¤Æ¤Î¥«¡¼¥Í¥ë¤Î¥ª¥×¥·¥ç¥ó¤ò¿·¤·¤¤·Á¼°¤Î¤â¤Î¤ËÃÖ¤´¹¤¨, ¥³¥ó¥Õ¥£¥°¥Õ¥¡¥¤¥ë ¤ò½¤Àµ¤·¤Æ config(8) ¤ò¼Â¹Ô¤·¤¿¸å¤Ë ¥«¡¼¥Í¥ë¤Î¥³¥ó¥Ñ¥¤¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Ç make depend ¤ò¼Â¹Ô¤¹¤ì¤Ð, ¥Ó¥ë¥É¥×¥í¥»¥¹¤¬¼«Æ°Åª¤ËÊѹ¹¤µ¤ì¤¿ ¥ª¥×¥·¥ç¥ó¤ò¸¡½Ð¤·, ɬÍפʥե¡¥¤¥ë¤À¤±¤ò ºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬ ºÇ½ªÅª¤ÊÌÜŪ¤Ç¤¹. config(8) ¤ò¼Â¹Ô¤¹¤ë¤¿¤Ó¤Ë¸Å¤¤¥³¥ó¥Ñ¥¤¥ë¥Ç¥£¥ì¥¯¥È¥ê ¤ò¾Ã¤·¤Æ¤·¤Þ¤¦¸½ºß¤Î¤ä¤ê¤«¤¿¤Ï, ¤ä¤¬¤Æ¤ª¤³¤Ê¤ï¤ì¤Ê¤¯¤Ê¤ë¤Ç¤·¤ç¤¦.
´ðËÜŪ¤Ë, ¥«¡¼¥Í¥ë¥ª¥×¥·¥ç¥ó¤Ï¥«¡¼¥Í¥ë¤Î¥³¥ó¥Ñ¥¤¥ë¥×¥í¥»¥¹¤Î C ¥×¥ê¥×¥í¥»¥Ã¥µ¤Î¥Þ¥¯¥í¤ÎÄêµÁ¤Ë¤¹¤®¤Þ¤»¤ó. ¼ÂºÝ¤ËÁªÂòŪ¤Ë make ¤Ç¤¤ë ¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï, Âбþ¤¹¤ëÉôʬ¤Î¥«¡¼¥Í¥ë¥½¡¼¥¹ (¤Þ¤¿¤Ï¥«¡¼¥Í¥ë¤Î .h ¥Õ¥¡¥¤¥ë) ¤¬¥ª¥×¥·¥ç¥ó¤ò»È¤¨¤ë¤è¤¦¤Ë¤¢¤é¤«¤¸¤á½ñ¤«¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð ¤Ê¤ê¤Þ¤»¤ó. ¤Ä¤Þ¤ê¥Ç¥Õ¥©¥ë¥ÈÃͤò¥³¥ó¥Õ¥£¥°¥Õ¥¡¥¤¥ë¤Î¥ª¥×¥·¥ç¥ó¤ÇÃÖ¤´¹¤¨ ¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó. ¤³¤ì¤ÏÉáÄ̤ϼ¡¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹.
#ifndef THIS_OPTION #define THIS_OPTION (some_default_value) #endif /* THIS_OPTION */
¤³¤Î¾ì¹ç, ´ÉÍý¼Ô¤¬¥³¥ó¥Õ¥£¥°¥Õ¥¡¥¤¥ë¤Î¥ª¥×¥·¥ç¥ó¤ËÊ̤ÎÃͤòµ½Ò¤¹¤ì¤Ð, ¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¤òÂǤÁ¾Ã¤·¤Æ¿·¤·¤¤ÃͤËÃÖ¤´¹¤¨¤é¤ì¤Þ¤¹. ÅöÁ³, ¿·¤·¤¤Ãͤϥץê¥×¥í¥»¥Ã¥µ¤Ë¤è¤Ã¤Æ¥½¡¼¥¹¥³¡¼¥ÉÃæ¤Ç ÃÖ¤´¹¤¨¤é¤ì¤ë¤¿¤á, ¥Ç¥Õ¥©¥ë¥È¤ÎÃͤ¬»È¤ï¤ì¤Æ¤¤¤¿¾ì½ê¤Ë¤ª¤¤¤Æ C ¤Î¼°¤È¤·¤ÆÍ¸ú¤ÊÃͤǤʤ±¤ì¤Ð ¤Ê¤ê¤Þ¤»¤ó.
¤Þ¤¿, ñ¤ËÆÃÄê¤Î¥³¡¼¥É¤ò͸ú¤Ë¤¹¤ë¤« ̵¸ú¤Ë¤¹¤ë¤«¤òÀßÄꤹ¤ë¤¿¤á¤Î Ãͤò»ý¤¿¤Ê¤¤¥ª¥×¥·¥ç¥ó¤âºî¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹.
#ifdef THAT_OPTION [¤¢¤Ê¤¿¤Î¥³¡¼¥É¤¬Æþ¤ê¤Þ¤¹] #endif
¥³¥ó¥Õ¥£¥°¥Õ¥¡¥¤¥ë¤Ë THAT_OPTION ¤Èµ½Ò¤¹¤ë¤À¤±¤Ç (ÃͤÎÍ̵ ¤Ë¤«¤«¤ï¤é¤º) Âбþ¤¹¤ëÉôʬ¤Î¥³¡¼¥É¤¬ÁȤ߹þ¤Þ¤ì¤Þ¤¹.
C ¸À¸ì¤Ë¤¯¤ï¤·¤¤¿Í¤Ç¤¢¤ì¤Ð ``¥³¥ó¥Õ¥£¥°¥ª¥×¥·¥ç¥ó'' ¤È¤µ¤ì¤Æ¤¤¤ë¤â¤Î ¤Ï¾¯¤Ê¤¯¤È¤â°ì¤Ä¤Î #ifdef ¤Ç»²¾È¤µ¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤Ï¤¹¤°¤ËÍý²ò ¤Ç¤¤ë¤Ç¤·¤ç¤¦. ¤È¤³¤í¤Ç, ¤´¤¯°ìÉô¤Î¿Í¤¿¤Á¤Ï¼¡¤Î¤è¤¦¤Ê¤â¤Î¤ò»î¤·¤Æ ¤ß¤è¤¦¤È¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó.
options notyet,notdef
¤³¤Î¤è¤¦¤Ë¥³¥ó¥Õ¥£¥°¥Õ¥¡¥¤¥ë¤ò¤·¤Æ¤ª¤¯¤È, ¥«¡¼¥Í¥ë¤Î¥³¥ó¥Ñ¥¤¥ë¤Ï ¤¦¤Þ¤¯¹Ô¤¤Þ¤»¤ó. :-)
(ÌõÃí: ¤¿¤È¤¨¤Ð MATH_EMULATE ¤Î¤è¤¦¤Ë ͸ú/̵¸ú¤Î¤¿¤á¤Î¥Ñ¥é¥á¥¿¤ò »ý¤¿¤Ê¤¤¥ª¥×¥·¥ç¥ó¤Î¾ì¹ç, ̵¸ú¤È¤¹¤ë¤¿¤á¤Î¥Ñ¥é¥á¥¿¤ò¤Ä¤±¤Æ, ¥ª¥×¥·¥ç¥ó ¤Ç¡Ö̵¸ú¤È¤¹¤ë¡×¤ÈÌÀ¼¨¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¤È¤¤¤¦°ÕÌ£¤Ç¤¹)
ÌÀ¤é¤«¤Ë, Ǥ°Õ¤Î¥ª¥×¥·¥ç¥ó̾¤¬¥«¡¼¥Í¥ë¥½¡¼¥¹¥Ä¥ê¡¼Á´ÂΤǤɤΤ褦¤Ë »È¤ï¤ì¤Æ¤¤¤ë¤«¤òÄɤ¤¤«¤±¤ë¤³¤È¤ÏÈó¾ï¤ËÆñ¤·¤¤¤³¤È¤Ç¤¹. ¤³¤Î¤³¤È¤¬ ¿·¤·¤¤·Á¼° ¤Î¥ª¥×¥·¥ç¥ó¤Îµ¡¹½¤òºÎ¤êÆþ¤ì¤ëÍýͳ¤ÎÇØ·Ê¤Ç¤¹. ¤³¤³¤Ç¤Ï¤½¤ì¤¾¤ì¤Î¥ª¥×¥·¥ç¥ó¤Ï ¥«¡¼¥Í¥ë¥³¥ó¥Ñ¥¤¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ëÊÌ¡¹¤Î .h ¥Õ¥¡¥¤¥ë¤È¤Ê¤ê, opt_foo.h ¤È¤¤¤¦Ì¾Á°¤Ë ¤µ¤ì¤Þ¤¹. ¤³¤ÎÊýË¡¤Ç¤Ï, Ä̾ï¤Î Makefile ¤Î°Í¸´Ø·¸¤¬Å¬ÍѤµ¤ì, make ¥×¥í¥°¥é¥à¤Ï¥ª¥×¥·¥ç¥ó¤¬Êѹ¹¤µ¤ì¤¿»þ¤ËºÆ¥³¥ó¥Ñ¥¤¥ë¤¬É¬Í×¤Ê ¤â¤Î¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹.
¸Å¤¤·Á¼°¤Î¥ª¥×¥·¥ç¥ó¤Îµ¡¹½¤Ï, ¶ÉÉôŪ¤Ê¥ª¥×¥·¥ç¥ó¤ä¼Â¸³Åª¤Ê¥ª¥×¥·¥ç¥ó ¤Î¤è¤¦¤Ê°ì»þŪ¤ËÍøÍѤµ¤ì¤ë¤È¹Í¤¨¤é¤ì¤ë¥ª¥×¥·¥ç¥ó¤Ë¤ª¤¤¤Æ¤Ï ͸ú¤Ç¤¹. ¤Ä¤Þ¤ê #ifdef ¤ò¥«¡¼¥Í¥ë¤Î¥½¡¼¥¹¤ËÄɲ乤ë¤Î¤Ï´Êñ¤Ç¤¢¤ê, ¤½¤ì¤¬¤½¤Î¤Þ¤Þ¥«¡¼¥Í¥ë¥³¥ó¥Õ¥£¥°¥ª¥×¥·¥ç¥ó¤Ë¤Ê¤ê¤Þ¤¹. ¤³¤Î¾ì¹ç, ´ÉÍý¼Ô¤Ï¥ª¥×¥·¥ç¥ó¤ÎÍøÍѤˤª¤¤¤Æ °Í¸´Ø·¸¤òÇİ®¤·¤Æ¤ª¤¯ÀÕǤ¤¬¤¢¤ê¤Þ¤¹ (¤Þ¤¿, ¼êư¤Ç¥«¡¼¥Í¥ë¤Î°ìÉôʬ¤ò ¶¯À©Åª¤ËºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó). ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë ¥ª¥×¥·¥ç¥ó¤Î¤¹¤Ù¤Æ¤Ë¤Ä¤¤¤Æ°ì¤Ä¤Ç¤âÊѹ¹¤¬¤¢¤ë¤È, config(8) ¤Ï ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥ª¥×¥·¥ç¥ó¤¬¥³¥ó¥Õ¥£¥°¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ë ¤¢¤ë¤È¤¤¤¦·Ù¹ð ¤ò½Ð¤·¤Þ¤¹¤¬, ¥«¡¼¥Í¥ë¤Î Makefile Æâ¤Ë¤Ï¤½¤ì¤ò´Þ¤á¤Þ¤¹.