#if !NDEBUG
#define MY_ASSERT(x) if(!x) fail(__FILE__, __LINE__);
#else
#define MY_ASSERT(x) x; // Do any side-effects
#endif
if (*itr++ != 1)
MY_ASSERT(false) // Guaranteed fail
MY_ASSERT(x == 4);
if (!x == 4) fail("C:\\File.cpp",20);
#define MY_ASSERT(x) if ((x)) { ... }
#define MY_ASSERT(x) (x)
MY_ASSERT(RealySlowCheck() == 42);
ReallySlowCheck() == 42;
#include
#include
#if !NDEBUG
#define MY_ASSERT(x) if (!(x)) fail(__FILE__, __LINE__);
#else
#define MY_ASSERT(x) // Nothing
#endif
typedef std::vector ByteArray;
void fail(const char *pszFile, int line)
{
std::cout << "Failure in file" << pszFile <<
"(" << line << ")" << std::endl;
}
class Image
{
public:
void DecodeMsg(const ByteArray& arrMsg)
{
/* Message Format
2 bytes: Width (little endian)
2 bytes: Height (little endian)
1 byte: Data Order. Always 1 (R then G then B)
1 bytes: Bits per pixel
n bytes: Pixles
*/
ByteArray::const_iterator itr = arrMsg.begin();
// 2-bytes witdh
unsigned char c1 = *itr++, c2 = *itr++;
m_Width = c1 | (c2 << 8);
MY_ASSERT(m_Width != 0);
// 2-bytes height
c1 = *itr++; c2 = *itr++;
m_Height = c1 | (c2 << 8);
MY_ASSERT(m_Height != 0);
// 1-byte version. Always 1
if (*itr++ != 1)
MY_ASSERT(false) // Guaranteed fail
// 1-byte BPP
m_BPP = *itr++;
MY_ASSERT(m_BPP == 8 || m_BPP == 16 || m_BPP == 24);
std::cout << "Width: 0x" << std::hex << m_Width << std::endl
<< "Height: 0x" << m_Height << std::endl
<< "Bpp: 0x" << m_BPP << std::endl;
// Continue to read pixels
}
private:
unsigned short m_Width, m_Height;
unsigned int m_BPP;
};
int main()
{
unsigned char arrBytes[] = { 0x1F, 0x02, 0x3A, 0x00, 0x01, 0x08, 0x65, 0x25};
ByteArray arrMsg(arrBytes, arrBytes+sizeof(arrBytes));
Image test;
test.DecodeMsg(arrMsg);
return 0;
}
if (*itr++ != 1)
MY_ASSERT(false) // Guaranteed fail
// 1-byte BPP
m_BPP = *itr++;
if (*itr++ != 1)
{
MY_ASSERT(false) // Guaranteed fail
}
// 1-byte BPP
m_BPP = *itr++;
وفي 03 آذار 2009 07:28 م، قال سلوان الهلالي متحمساً:
من أين تأتي بهذه المسائل العجيبة... فقط لو أعرف.في 02 مارس 2009 02:10 م، قال عبد اللطيف حاجي علي بهدوء وتؤدة:
الـ code التالي (قابل للترجمة، إن لم يقم محرك المنتدى بإزالة الأقواس كعادته) يعطي نتائج مختلفة بين الـ release و الـ debug.