ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¶§ ÇÔ¼öÀÇ ¿øÇü µÚÂÊ¿¡ ÀÌ ÇÔ¼ö ½ÇÇàÁß¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¹¿ÜÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. Àμö ¸ñ·Ï ´ÙÀ½¿¡ throw Å°¿öµå¿Í °ýÈ£¾È¿¡ ¿¹¿ÜÀÇ Å¸ÀÔÀ» ÁöÁ¤ÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î ¹®ÀÚ¿ ŸÀÔÀÇ ¿¹¿Ü¸¦ ´øÁö´Â ÇÔ¼ö¶ó¸é ´ÙÀ½°ú °°ÀÌ ¾´´Ù.
void func(int a, int d) throw(char *)
ÀÌ ¼±¾ð¿¡ ÀÇÇØ func ÇÔ¼ö´Â char *ÇüÀÇ ¿¹¿Ü¸¦ ´øÁø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. °¡´ÉÇÑ ¿¹¿ÜÀÇ Á¾·ù°¡ µÎ°¡Áö ÀÌ»óÀÏ °æ¿ì °ýÈ£¾È¿¡ ¿¹¿ÜÀÇ Å¸ÀÔµéÀ» ÄÞ¸¶·Î ±¸ºÐÇؼ ³ª¿ÇÑ´Ù. ´ÙÀ½ ¿¹´Â ¹®ÀÚ¿ ¿¹¿Ü¿Í Á¤¼öÇü ¿¹¿Ü¸¦ ´øÁö´Â ÇÔ¼ö funcÀÇ ¿øÇüÀÌ´Ù.
void func(int a, int d) throw(char *, int)
¿¹¿Ü¸¦ ´øÁöÁö ¾Ê´Â ÇÔ¼ö´Â throw()¸¸ Àû°í °ýÈ£¾ÈÀ» ºñ¿ö µÐ´Ù. ÇÔ¼ö ¿øÇü µÚ¿¡ ¾Æ¹«°Íµµ ÀûÁö ¾ÊÀ¸¸é ÀÓÀÇÀÇ ¿¹¿Ü¸¦ ´øÁú ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù. ±×·¡¼ ´ÙÀ½ µÎ ÇÔ¼öÀÇ ¶æÀº ¿ÏÀüÈ÷ ´Ù¸£´Ù.
void func(int a, int d) throw()
void func(int a, int d)
ÀüÀÚ´Â ¿¹¿Ü¸¦ ´øÁöÁö ¾ÊÀ¸¸ç ÈÄÀÚ´Â ÀÓÀÇÀÇ ¿¹¿Ü¸¦ ´øÁú ¼öµµ ÀÖ°í ¾Æ´Ò ¼öµµ ÀÖ´Ù. ÇÔ¼ö ¿øÇü¿¡ ´øÁú ¼ö ÀÖ´Â ¿¹¿ÜÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÏ´Â °ÍÀº ¹®¼ÈÀÇ Àǹ̰¡ Àִµ¥ ÀÏÁ¾ÀÇ ÁÖ¼®À̶ó°í º¸¸é µÈ´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â »ç¶÷¿¡°Ô ¾î¶² Á¾·ùÀÇ ¿¹¿Ü°¡ ¹ß»ýÇÒ ¼ö ÀÖ´ÂÁö¸¦ ¾Ë·Á ÁÖ¸ç °³¹ßÀÚ´Â ¿øÇü µÚÂÊÀÇ Å¸ÀÔ¿¡ ´ëÇØ ÀûÀýÇÑ catch¹®À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
¿¹¿Ü ÁöÁ¤Àº ÇÔ¼ö ½ÇÇàÁß¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¸ðµç ¿¹¿Ü¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇØ¾ß ÇϹǷΠÇÔ¼ö ÀÚ½ÅÀÌ ´øÁö´Â ¿¹¿Ü»Ó¸¸ ¾Æ´Ï¶ó ÀÌ ÇÔ¼ö°¡ È£ÃâÇÏ´Â ÇÔ¼ö¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¹¿Ü±îÁöµµ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¸¸¾à ÁöÁ¤µÈ ¿¹¿Ü°¡ ¾Æ´Ñ ¿¹¿Ü¸¦ ´øÁö´Â ÇÔ¼ö¶ó ÇÏ´õ¶óµµ ÀÌ È£ÃâÀÌ ±ÝÁöµÇÁö´Â ¾Ê´Â´Ù.
void fA() throw(int, double)
{
}
void fB() throw(char)
{
fA();
}
fA°¡ int, double ¿¹¿Ü¸¦ ´øÁú ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â fB´Â char»Ó¸¸ ¾Æ´Ï¶ó int, doubleµµ ¸í½ÃÇØ¾ß ÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù. ÀÚ½ÅÀÌ È£ÃâÇÏ´Â ÇÔ¼öÀÇ ¿¹¿Ü¸¦ Á÷Á¢ ó¸®ÇÏÁö ¾Ê´Â´Ù¸é ¿¹¿Ü´Â °è¼Ó È£Ãâ ½ºÅÃÀÇ ¾Æ·¡ÂÊÀ¸·Î ´Ù½Ã ´øÁ®Áö±â ¶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ¹Ì ¿À·¡Àü¿¡ °³¹ßµÈ ¶óÀ̺귯¸®µéÀº ¿¹¿Ü ÁöÁ¤ÀÌ Á¦´ë·Î µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡ ÀÌ ÁöÁ¤ÀÌ Æ²·È´Ù°í Çؼ fB°¡ fA¸¦ È£ÃâÇÏ´Â °ÍÀ» ±ÝÁöÇÏ´Â °ÍÀº ÀÌÄ¡¿¡ ¸ÂÁö ¾Ê´Ù. ¶ÇÇÑ ÀÚ½ÅÀÌ È£ÃâÇÏ´Â ÇÔ¼ö°¡ ³»ºÎÀûÀ¸·Î È£ÃâÇÏ´Â ÇÔ¼ö ¸ñ·ÏÀ» Á¤È®È÷ ÆľÇÇÑ´Ù´Â °Íµµ Çö½ÇÀûÀ¸·Î ¹«Ã´ ¾î·Æ´Ù.
¸¸¾à ÁöÁ¤ÇÏÁö ¾ÊÀº ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù¸é À̶§´Â unexpected¶ó´Â ÇÔ¼ö°¡ È£ÃâµÇ¾î ¹ÌÁöÁ¤ ¿¹¿Ü¸¦ ó¸®ÇÑ´Ù. unexcepted´Â µðÆúÆ®·Î terminate¸¦ È£ÃâÇÏ¿© ÇÁ·Î±×·¥À» °Á¦·Î Á¾·áÇϴµ¥ ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¹Ìó¸® ¿¹¿Ü Çڵ鷯¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.
unexpected_handler set_unexpected(unexpected_handler ph)
unexpeted_handler ŸÀÔÀº Àμöµµ ¸®ÅÏ°ªµµ ¾ø´Â ÇÔ¼ö Æ÷ÀÎÅÍ Å¸ÀÔÀÌ´Ù. void func(void) ŸÀÔÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇØ ³õ°í ¹ÌÁöÁ¤ ¿¹¿Ü Çڵ鷯·Î ÁöÁ¤ÇÏ¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
¿¹ Á¦ : unexpect |
#include <Turboc.h>
#include <exception>
using namespace std;
void myunex()
{
puts("¹ß»ýÇؼ´Â ¾ÈµÇ´Â ¿¡·¯ ¹ß»ý");
exit(-2);
}
void calc() throw(int)
{
throw "string";
}
void main()
{
set_unexpected(myunex);
try {
calc();
}
catch(int) {
puts("Á¤¼öÇü ¿¹¿Ü ¹ß»ý");
}
puts("ÇÁ·Î±×·¥ Á¾·á");
}
calc¿¡¼ ¹®ÀÚ¿ ¿¹¿Ü¸¦ ´øÁö´Âµ¥ ´ëÀÀµÇ´Â catch´Â Á¤¼ö¸¦ ¹Þ´Â °Í¹Û¿¡ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù. À̶§´Â ¹Ì¸® ÁöÁ¤ÇÑ myunex ÇÔ¼ö°¡ È£ÃâµÇ¾î ¹ÌÁöÁ¤ ¿¹¿Ü¸¦ ó¸®ÇÑ´Ù. ÀÌ ¿¹Á¦¿¡¼´Â ¹ÌÁöÁ¤ ¿¹¿Ü°¡ ¹ß»ýÇßÀ½À» ¹®ÀÚ¿·Î ¾Ë¸®±â¸¸ ÇÏ°í exit·Î ÇÁ·Î±×·¥À» Á¾·áÇß´Ù. ¶Ç´Â exit(-2) ´ë½Å¿¡ throw 1 µîÀ¸·Î ÁöÁ¤µÈ ¿¹¿Ü·Î ¹Ù²ã ´Ù½Ã ´øÁú ¼öµµ ÀÖ´Ù. ÀÌ·¸°Ô µÇ¸é ÁöÁ¤µÈ ŸÀÔÀÇ ¿¹¿Ü Çڵ鷯·Î Á¦¾î¸¦ ¿Å±ä´Ù.
ºñÁÖ¾ó C++Àº ¹ÌÁöÁ¤ ¿¹¿Ü Çڵ鷯¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î À§ ¿¹Á¦´Â Á¦´ë·Î ÄÄÆÄÀϵÇÁö ¾Ê´Â´Ù. gcc´Â ÀÌ ¿¹Á¦¸¦ Á¦´ë·Î ÄÄÆÄÀÏÇÑ´Ù.