32-3-³ª.¿¹¿Ü ÁöÁ¤

ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¶§ ÇÔ¼öÀÇ ¿øÇü µÚÂÊ¿¡ ÀÌ ÇÔ¼ö ½ÇÇàÁß¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¹¿ÜÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. Àμö ¸ñ·Ï ´ÙÀ½¿¡ 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´Â ÀÌ ¿¹Á¦¸¦ Á¦´ë·Î ÄÄÆÄÀÏÇÑ´Ù.