ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. assert
assert´Â µð¹ö±ëÀ» À§Çؼ »ç¿ëÇÏ´Â ÇÔ¼ö·Î, Á¤ÇØÁø Á¶°ÇÀ» À§¹ÝÇÏ´ÂÁö¸¦ °Ë»çÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹ÄÁµ¥ °´Ã¼ÀÇ ÇÒ´ç ¿©ºÎ, ºÐ¸ð°¡ 0ÀÌ µÇ´Â °Í °°Àº À߸øµÈ °ª ÀԷµîÀÌ ±×°ÍÀÌ´Ù. #include <assert.h> #include <iostream> using namespace std; int foo(int a, int b) { assert(b !=0 ); cout << a << "/" << b << endl; return a/b; } int main(int argc, char **argv) { cout << foo(100, 10) << endl; cout << foo(100, 0) << endl; return 0; }
ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©ÁØ´Ù. $ ./assert 100/10 10 assert: assert.cc:8: int foo(int, int): Assertion `b !=0' failed.
µµ´ÞÇØ¼´Â ¾ÈµÇ´Â ¹®¸Æ¿¡ µµ´ÞÇßÀ½À» ¾Ë¸®±â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. HTTP ±â¹ÝÀÇ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µç´Ù°í °¡Á¤ÇØ º¸ÀÚ. ÀÌ ÇÁ·Î±×·¥Àº À¯Àú Method¿¡ µû¶ó if-else ºÐ±â¸¦ ÇÑ´Ù. ¸¸¾à HTTPÀÇ ÇÁ·ÎÅäÄÝÀ» ¿ÏÀüÇÏ°Ô ÀÌÇØÇϰí ÀÖ´Ù¸é ¹®Á¦µÉ°Ô ¾øÁö¸¸ ±×·¸Áö ¾ÊÀ» °æ¿ì¿¡´Â ¿¹»óÄ¡ ¸øÇÑ Method°¡ µé¾î ¿Ã ¼ö ÀÖÀ¸¹Ç·Î assert󸮸¦ ÇØÁÙ Çʿ䰡 ÀÖ´Ù. if( method == HTTP_GET)
...
else if(method == HTTP_POST)
...
else if
...
else
assert(!"Unknown Method");
ÇÁ·Î±×·¥À» ¹èÆ÷ÇÒ ¶§´Â assert¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù. NDEBUG¸¦ Á¤ÀÇÇϸé ÄÄÆÄÀϽà assert¹®ÀÌ Á¦¿Ü½ÃŲ´Ù. $ g++ -o assert assert.cc -DNDEBUG assert ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇÑ µð¹ö±ë ·Î±× Ãâ·Â
assert°á°ú¸¦ º¸¸é ÆÄÀϸí, ÇÔ¼ö¸í, È£ÃâµÈ ÁÙ ¼ö¿Í °°Àº Á¤º¸¸¦ Ãâ·ÂÇÏ´Â °É º¼ ¼ö ÀÖ´Ù. C++ÀÇ °æ¿ì Ŭ·¡½º ¸í±îÁö Ãâ·ÂÇÑ´Ù. assert.h¸¦ ¿¾îº¸¸é, À̵é Á¤º¸¸¦ ¾ò±â À§Çؼ ¸î°¡Áö ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â °É È®ÀÎÇÒ ¼ö ÀÖ´Ù. 1. __func__ : ÇÔ¼ö¸íÀ» °¡Á®¿Â´Ù. 2. __FILE__ : ÆÄÀϸíÀ» ¾ò¾î¿Â´Ù. 3. __LINE__ : ÁÙ¼ö¸¦ °¡Á®¿Â´Ù. 4. __DATE__ : ÄÄÆÄÀÏ µÈ ³¯Â¥. 5. __TIME__ : ÄÄÆÄÀÏ µÈ ½Ã°£ 6. __FUNCTION__ : C++¿¡¼ »ç¿ë __func__¿Í µ¿ÀÏÇÏ´Ù. 7. __PRETTY_FUNCTION__ : Ŭ·¡½º À̸§°ú ÇÔ¼ö¸í, ¸Å°³ º¯¼ö±îÁö ÇÔ²² º¸¿©ÁØ´Ù.
__ func __´Â ÇÔ¼öÀ̸§¸¸À» °¡Á®¿Â´Ù. C++¿¡¼ Ŭ·¡½º¿Í ÇÔ²² »ç¿ëÇÒ °æ¿ì ¸Þ¼µå À̸§¸¸ °¡Á®¿Ã »Ó, Ŭ·¡½º À̸§À» °¡Á®¿Ã ¼ö ¾ø´Ù. Ŭ·¡½º À̸§±îÁö °¡Á®¿À±â À§Çؼ __ PRETTY_FUNCTION __À» »ç¿ëÇÒ ¼ö Àִµ¥ g++ È®ÀåÀ¸·Î Ç¥ÁØÀÌ ¾Æ´Ï´Ù. ÄÄÆÄÀÏ·¯ ȣȯ¼ºÀ» °í·ÁÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ Æí¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. class DB
{
private:
const char *mclassName;
public:
DB() { mclassName = __func__; }
}
À̺¥Æ® ·Î±ëÀ» À§ÇÑ °£´ÜÇÑ ¿¹Á¦ #include <iostream>
#include <typeinfo>
#include <assert.h>
using namespace std;
#define DB_OPEN_ERROR 100
class CLog
{
private:
int merrnum;
const char *mfuncname;
int mlinenum;
public:
CLog(int errnum, const char *func_name, int linenum)
{
merrnum = errnum;
mfuncname = func_name;
mlinenum = linenum;
}
~CLog(){};
void Logging()
{
cout << "Logging " << "[" << merrnum << "] " << mfuncname << " : " << mlinenum << endl;
}
};
class DB
{
private:
const char* class_name;
public:
DB(int a)
{
class_name = __func__;
}
int set(int a)
{
if(a < 0) throw CLog(100, __PRETTY_FUNCTION__, __LINE__);
cout << "set " << a << endl;
return 1;
}
};
int main()
{
DB *myDB;
myDB = new DB(1);
try
{
myDB->set(-100);
}
catch (CLog &e)
{
e.Logging();
}
return 0;
}
assert¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖÀ»±î ?
assert¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀº ÃÖ¼ÒÇÑ ±× ÀÚ¸®¿¡ ¿¹¿Ü »óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀÎÁöÇÏ´Â »óȲÀÓÀ» ÀǹÌÇÑ´Ù. ±×·¸´Ù¸é ±ò²ûÇÏ°Ô ¿¡·¯Ã³¸®¸¦ ÇÏ´Â°Ô ³´Áö ¾ÊÀ»±î ? ±×°Ô ºñ·Ï ÇÁ·Î±×·¥ °³¹ß ÁßÀ̶ó°í ÇÏ´õ¶óµµ ¸»ÀÌ´Ù. ¹°·Ð ƯÁ¤ÇÑ ¿µ¿ª¿¡ ¿¹¿Ü »óȲÀÌ ¹ß»ýÇÒ °Å¶ó´Â °É ¿¹ÃøÀº Çϰí ÀÖÁö¸¸, ¿¡·¯ ó¸® Äڵ带 ÀÛ¼ºÇÒ¸¸ÇÑ Á¤º¸¸¦ ¾òÁö ¸øÇßÀ» ¶§´Â assert¸¦ »ç¿ëÀÌ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù. À§¿¡¼ ¾ð±ÞÇÑ HTTP ±â¹Ý ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÌ ±×·± ¿¹ÀÌ´Ù. if , else if ÈÄ ¸¶Áö¸· else¿¡ assert¸¦ ¹èÄ¡ÇØ¼ ¿¹¿Ü¸¦ ÃßÀûÇÒ ¼ö ÀÖ´Ù.
¶Ç´Â »óȲ ¿¹ÃøÀÌ ¾î·Á¿î °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹ÄÁµ¥ ÀÚ¿øÇØÁ¦ÀÇ °æ¿ìÀε¥, ÀÚ¿øÀÌ ¿©±âÀú±â ÇÔ¼ö¿Í Ŭ·¡½º¸¦ ³Ñ³ªµé´Ù º¸¸é ÇØÁ¦ÇÏ´Â ÀÚ¿øÀÌ À¯È¿ÇÑ ÀÚ¿øÀÌÁö ¾Ö¸Å¸ðÈ£ÇÒ ¶§°¡ ÀÖ´Ù. À̰æ¿ì assert¸¦ ÀÌ¿ëÇØ¼ ÀÚ¿øÀ» µÎ¹ø ÇØÁ¦ Çϴ¹® µîÀÇ ¹®Á¦¸¦ ÃßÀûÇÒ ¼ö ÀÖ´Ù.
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|