最近在读llbird的MFC串口操作库CnComm,在vs2015中使用了一下,感觉非常简洁精妙,好的地方就不说了,来谈谈问题。首先是断言的使用问题,感觉作者的断言使用有点小小的问题,当然我说的也不一定对,欢迎大家来提意见!!
先看断言定义:
#ifndef CN_ASSERT
#define CN_2STR(L) _T(#L) //!< 将表达式L转换成字符串
#define CN_LINE(L) CN_2STR(L) //!< 将行号L转换成字符串
/*! 内部断言 启用异常将抛出异常 否则调试版将退出 发行版未启用异常将不做任何处理 */
#define CN_ASSERT(E) ((E) ? true : CnComm::Assert(_T("CN_ASSERT(") _T(#E) _T(") failed; CnComm(") CN_LINE(__LINE__) _T("); ")))
#endif
这个定义也些许问题,来看MFC的assert.h中关于assert的定义:
#ifdef NDEBUG
#define assert(expression) ((void)0)
#else
_ACRTIMP void __cdecl _wassert(
_In_z_ wchar_t const* _Message,
_In_z_ wchar_t const* _File,
_In_ unsigned _Line
);
#define assert(expression) (void)( \
&nb