sunlock 发表于 2012-6-1 15:09:18

Windows下有个地方ACE容易出现无限的递归调用

#define ACE_ASSERT(X) ACE_TEST_ASSERT(X)


ACE_Export void __ace_assert(const char *file, int line, const ACE_TCHAR *expression);
ACE_END_VERSIONED_NAMESPACE_DECL
#define ACE_TEST_ASSERT(X) \
((X)                      \
   ? static_cast<void>(0)   \
   : ACE_VERSIONED_NAMESPACE_NAME::__ace_assert(__FILE__, __LINE__, ACE_TEXT_CHAR_TO_TCHAR (#X)))

在__ace_assert 函数中:

void
__ace_assert(const char *file, int line, const ACE_TCHAR *expression)
{
int error = ACE_Log_Msg::last_error_adapter ();
ACE_Log_Msg *log = ACE_Log_Msg::instance ();
log->set (file, line, -1, error, log->restart (),
            log->msg_ostream (), log->msg_callback ());
log->log (LM_ERROR, ACE_TEXT ("ACE_ASSERT: file %N, line %l assertion failed for '%s'.%a\n"), expression, -1);
}

调用了个ACE_Log_Msg *log = ACE_Log_Msg::instance ();
这个函数里面又会使用ACE_ASSERT

这样只要调用 这个宏 就会出现递归调用

nettoobad 发表于 2012-6-3 14:01:41

是吗,好像不是吧

winston 发表于 2012-6-3 23:26:00

如果确实有问题,可以反馈给ACE项目组的邮件列表。
页: [1]
查看完整版本: Windows下有个地方ACE容易出现无限的递归调用