2006-07-13
C++¤ÎÂç¤¤ÊÆÃħ¤Î°ì¤Ä¤È¤·¤ÆC¤È¤Î¸ß´¹À¤¬¤¢¤ê¡¢¤Þ¤¿¡¢C¤Î»ñ»º¤ò¤½¤Î¤Þ¤ÞºÆÍøÍѤǤ¤ë¤È¤¤¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¼ÂºÝ¡¢ÁȤ߹þ¤ß³«È¯¤Ë¤ª¤±¤ë´û¸»ñ»º¤ä¥ß¥É¥ë¥¦¥§¥¢¤Ê¤É¤ÎÂç¿¿ô¤ÏC¤Ë¤è¤ë¤â¤Î¤Ç¤¹¤Î¤Ç¡¢¤³¤ì¤é¤¬ÍøÍѤǤ¤Ê¤¤¤È¤Ê¤ë¤È¤«¤Ê¤ê¿É¤¤¤ï¤±¤Ç¤¹¤¬¡¢C++¤Ç¤ÏC¤Î»ñ»º¤ò´Êñ¤Ë͸úÍøÍѤ¹¤ë¤¿¤á¤Îµ¡Ç½¤¬È÷¤ï¤Ã¤Æ¤¤¤Þ¤¹¡£
¤Þ¤º¡¢C++¤«¤éC¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹ÊýË¡¤Ç¤¹¡£¤³¤ì¤ÏC¤Ç¼ÂÁõ¤µ¤ì¤¿´Ø¿ô¤ò¡¢C++¦¤ÇÀë¸À¤¹¤ëºÝ¤Ë
extern "C" ¤òÉÕ¤±¤ë¤³¤È¤Ç²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢
extern "C" void func(void);
¤È¤¤¤Ã¤¿¶ñ¹ç¤Ç¤¹¡£Ê£¿ô¤Î´Ø¿ô¤òÀë¸À¤¹¤ëºÝ¤Ï¡¢¥Ö¥í¥Ã¥¯¤ò»È¤Ã¤Æ¼¡¤Î¤è¤¦¤Ëµ½Ò¤¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
extern "C" {
void func(void);
int foo(int);
int bar(const char*);
}
extern "C" ¤È¤¤¤¦¤Î¤Ï²¿¤«¤È¤¤¤¦¤È¡¢¸À¸ì·ë¹ç¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î"C"¤ÎÉôʬ¤ò"C++"¤È¤¹¤ì¤Ð¡¢¤½¤ì¤¬C++¤Î³°Éô¼±Ê̻ҤǤ¢¤ë¤³¤È¤òɽ¤·¤Þ¤¹¡£É¸½àµ¬³Ê¤ÇÊݾڤµ¤ì¤ë¸À¸ì·ë¹ç¤Ï"C"¤È"C++"¤À¤±¤Ç¤¹¤¬¡¢Â¾¤Ë¤â"Ada"¤ä"Fortran"¤È¤¤¤Ã¤¿»ØÄ꤬²Äǽ¤Ê½èÍý·Ï¤â¤¢¤ë¤ï¤±¤Ç¤¹¡£
¤È¤³¤í¤Ç¡¢extern "C"¤òÍѤ¤¤ÆC·ë¹ç¤Ë¤·¤¿¾ì¹ç¡¢C++·ë¹ç¤È¤Ï²¿¤¬°Û¤Ê¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©¸·Ì©¤Ë¤Ï½èÍý·Ï¤Ë¤è¤ë¤ï¤±¤Ç¤¹¤¬¡¢C++¤Î¾ì¹ç¡¢¡Ê¥ê¥ó¥«¤¬Ç§¼±¤¹¤ë¡Ë³°Éô¥·¥ó¥Ü¥ë¤Ï¡¢²¾°ú¿ôʤӤξðÊó¤¬Ëä¤á¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤ËÂФ·¤ÆC¤Ç¤Ï²¾°ú¿ôʤӤξðÊó¤Ï³°Éô¥·¥ó¥Ü¥ë¤ËÈ¿±Ç¤µ¤ì¤Þ¤»¤ó¡£·ë²Ì¤È¤·¤Æ¡¢C·ë¹ç¤Î¾ì¹ç¤Ë¤Ï´Ø¿ô¤Î¿½ÅÄêµÁ¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡£¤¿¤À¤·¡¢C·ë¹ç¤Î´Ø¿ô¤È¡¢Æ±Ì¾¤ÎC++·ë¹ç¤Î´Ø¿ô¤Ç¤¢¤ì¤Ð¿½ÅÄêµÁ¤Ï²Äǽ¤Ç¤¹¡£
´Ø¿ô¤Î¾ì¹ç¤Ï¡¢¾å¤Ç½ñ¤¤¤¿¤è¤¦¤ËC·ë¹ç¤ÈC++·ë¹ç¤Î°ã¤¤¤ÏÌÀ¤é¤«¤Ç¤¹¤¬¡¢¥ª¥Ö¥¸¥§¥¯¥È¡ÊÊÑ¿ô¡Ë¤Ë¤Ä¤¤¤Æ¤Ï¡¢Â¿¤¯¤Î¾ì¹ç¡¢C·ë¹ç¤ÈC++·ë¹ç¤Î´Ö¤Ç°ã¤¤¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤·¤«¤·¡¢½èÍý·Ï¤Ë¤è¤Ã¤Æ¤Ï
*1¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤Ã¤Æ¤â³°Éô¥·¥ó¥Ü¥ë¤Ë·¿¾ðÊó¤òËä¤á¹þ¤à¾ì¹ç¤¬¤¢¤ë¤Î¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¾ì¹ç¤â extern "C" ¤òÉÕ¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¾¤Ë¤âº³ºÙ¤ÊÅÀ¤È¤·¤Æ¡¢C¤ÈC++¤Î´Ö¤ÎÈó¸ß´¹À¤ËÃí°Õ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢¡Êfunc()¤Î¤è¤¦¤Ë¡Ë´Ø¿ô¤Î²¾°ú¿ôʤӤ¬¤Ê¤¤¾ì¹ç¡¢C¤Ç¤Ï¼Â°ú¿ô¤Î·¿¤ä¸Ä¿ô¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¤¬¡¢C++¤Ç¤Ïvoid¤ò»ØÄꤷ¤¿¤Î¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹¡£Â¾¤Ë¤â¡¢C99¤Ë¤·¤«¤Ê¤¤·¿¤ä½¤¾þ»Ò¤Ê¤É¤ÏC++¤Ç¤Ï»È¤¨¤Þ¤»¤ó¡£¤³¤¦¤·¤¿Èù̯¤ÊÈó¸ß´¹À¤ËÃí°Õ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤Þ¤¿¡¢C¤Ë¤ÏÎã³°½èÍý¤¬¤¢¤ê¤Þ¤»¤ó¤¬¡¢C++¤Ç¤Ï´Ø¿ô¤Ë²¿¤â»ØÄꤷ¤Ê¤±¤ì¤Ð¤¢¤é¤æ¤ëÎã³°¤¬Á÷½Ð¤µ¤ì¤ë²ÄǽÀ¤¬¤¢¤ë¤¿¤á¡¢¤½¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹Ê¸Ì®¼¡Âè¤Ç¤Ï¡¢¥µ¥¤¥º¡¦Â®Å٤Ȥâ¤Ë¸úΨ¤¬Äã²¼¤·¤Þ¤¹¡£¸úΨ¤Î¤³¤È¤ò¹Í¤¨¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢C¤Ç¼ÂÁõ¤·¤¿´Ø¿ô¤òC++¦¤ÇÀë¸À¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢Îã³°»ØÄê
throw() ¤òÉÕ¤±¤Æ¤ª¤¤¤¿Êý¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£
*1 Microsoft Visual C++¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¾ì¹ç¤â³°Éô¥·¥ó¥Ü¥ë¤Ë·¿¾ðÊó¤¬Ëä¤á¹þ¤Þ¤ì¤Þ¤¹¡£
Comment