¿ÜºÎ ¶óÀ̺귯¸®°¡ release ¸ðµå·Î µÈ °ÍÀÌ ¾Æ´Ï¶ó¼
¿¹»óÄ¡ ¸øÇÑ assertionÀ» ¸¸³ª´Â °æ¿ì°¡ ÀÖ´Ù. ±×·¸´Ù°í
¿ÜºÎ ¶óÀ̺귯¸®ÀÇ ¼Ò½º¸¦ ÀçÄÄÆÄÀÏ ÇÒ¼ö ÀÖ´Â »óȲÀÌ
¾Æ´Ï¶ó¸é »çÅ´ ´õ¿í ½É°¢ÇØÁø´Ù. VC++À̶ó¸é Ç¥ÁØ
C++ Çü½ÄÀÌ ¾Æ´Ñ ÀÚüÀûÀÎ ¿¹¿Ü ó¸® ±â¹ýÀ» ÀÌ¿ëÇØ
ÇØ°áÇÒ ¼ö ÀÖ°ÚÁö¸¸ ±× Äڵ尡 VC++»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥
Ç÷§Æû¿¡¼µµ ±¸µ¿µÇ¾î¾ß ÇÏ´Â °ÍÀ̶ó¸é Ç¥ÁØ C++ ¹®¹ý
ÀÌ¿Ü¿¡´Â »ç¿ëÇؼ´Â ¾ÈµÈ´Ù.
½ÇÁ¦·Î ÀÌ·± ÀÏÀ» ¸¸³ª°Ô µÇ¾ú°í ±×¶§ ³»°¡ ÀÛ¼ºÇÑ
ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
01: /////////////////////////////////////////////////////// 02: // HEADER 03: 04: #include <csetjmp> 05: #include <csignal> 06: #include <cassert> 07: #include <cstdio> 08: 09: #define ASSERT_TRY if (setjmp(g_env) == 0) 10: #define ASSERT_CATCH else 11: #define USE_ASSERT_TRY signal(SIGABRT, AbortHandler); 12: 13: /////////////////////////////////////////////////////// 14: // IMPLEMENTAION 15: 16: jmp_buf g_env; 17: 18: #if defined(WIN32) 19: #define CDECL __cdecl 20: #else 21: #define CDECL 22: #endif 23: 24: void CDECL AbortHandler(int num)
25: {
26: USE_ASSERT_TRY 27: longjmp(g_env, 1); 28: } 29:
30: ///////////////////////////////////////////////////////
31: // TEST CASE 32:
33: int TestFunction(int data)
34: {
35: assert(data != 50);
36: return data;
37: }
38: 39: void AssertionTest(void)
40: {
41: int sum = 0; 42:
43: for (int i = 1; i <= 100; i++)
44: {
45: ASSERT_TRY
46: {
47: sum += TestFunction(i);
48: }
49: ASSERT_CATCH
50: {
51: printf("i = %dÀÏ ¶§ assertion ¹ß»ý\n", i);
52: }
53: } 54:
55: printf("\nsum = %d\n", sum);
56: }
57: 58: int main(void)
59: {
60: USE_ASSERT_TRY 61: 62: AssertionTest();
63: 64: return 0;
65: }
½ÇÁ¦·Î »ç¿ëµÇ´Â °ÍÀº ASSERT_TRY,
ASSERT_CATCH, USE_ASSERT_TRYÀÇ
3°³ÀÇ ¸ÅÅ©·ÎÀÌ´Ù.
USE_ASSERT_TRY: assertion
catch ±â´ÉÀ» »ç¿ëÇÏ°Ú´Ù´Â ¼±¾ðÀÌ´Ù. ¸¸¾à ÀÌ°ÍÀÌ
¼±¾ðµÇÁö ¾Ê´Â´Ù¸é °ü·Ã ¸ÅÅ©·Î´Â ¸ðµÎ ¹«½ÃµÈ´Ù. ÀÌ°ÍÀ»
¼±¾ðÇÏ´Â ½ÃÁ¡ ÀÌÈķθ¸ °ü·Ã ¸ÅÅ©·Î°¡ È°¼ºÈµÈ´Ù.
ASSERT_TRY: ÀϹÝÀûÀ¸·Î
»ç¿ëµÇ´Â try - catch ±¸¹®ÀÇ try¿Í µ¿ÀÏÇÑ ¿ë¹ýÀÌ´Ù.
ÀÌ ³»ºÎ¿¡¼ assertionÀÌ ÀϾÀ» ¶§ catch ±¸¹®À¸·Î
Á¡ÇÁÇÑ´Ù.
ASSERT_CATCH: ÀϹÝÀûÀÎ
try - catch ±¸¹®¿¡¼ catch¿¡ ÇØ´çÇÑ´Ù. ´ÜÁö error
handlingÀ» À§ÇÑ class¸¦ ¹Þ´Â ºÎºÐÀº ºüÁ® Àִµ¥
±×°ÍÀÌ ÇÊ¿äÇÏ´Ù¸é Ãß°¡ÇÏ¸é µÈ´Ù. (ÇÏÁö¸¸ ´ÙÁß ÆĶó¹ÌÅÍ¿¡
´ëÇÑ catch°¡ µÉ·±Áö´Â Àǹ®)
»ç½Ç ³»¿ëÀº ÀüÇô C++ÀÌ ¾Æ´Ï°í C¿¡¼ »ç¿ëµÈ error
handling ±â¹ýÀ» »ç¿ëÇÏ¿´´Ù. (VC++ÀÇ µð¹ö±× ¸ðµå¿¡¼
Å×½ºÆ® Çϸé, assert¿¡ ´ëÇÑ °ÍÀ» Áß°£¿¡ IDE°¡ ¸ÕÀú
°¨Áö¸¦ Çϴµ¥ ±×¶© '¹«½Ã'¸¦ ´·¯ ÁÖ¸é µÈ´Ù.)
|