【发布时间】:2021-10-28 07:24:45
【问题描述】:
例子:
ENSURE(strTitle.LoadString(AFX_IDS_APP_TITLE));
ENSURE(strMainInstruction.LoadString(IDS_STR_SUBMIT_STATS_MAIN_TEXT));
ENSURE(strContent.LoadString(IDS_STR_SUBMIT_STATS_CONTENT_TEXT));
ENSURE(strAdditional.LoadString(IDS_STR_SUBMIT_STATS_ADDITIONAL_TEXT));
ENSURE(strFooter.LoadString(IDS_STR_TASK_DIALOG_FOOTER));
ENSURE(strVerification.LoadString(IDS_STR_SUBMIT_STATS_VERIFICATION_TEXT));
ENSURE(strExpand.LoadString(IDS_STR_FIND_OUT_MORE));
ENSURE(strCollapse.LoadString(IDS_STR_COLLAPSE));
定义:
#define ENSURE(cond) ENSURE_THROW(cond, ::AfxThrowInvalidArgException() )
这是一个 Microsoft 宏,虽然我看不到它的文档。当我注意到它在 Microsoft SDK 代码中使用时,我开始使用它。烦人的是它会触发代码分析:
警告 C26496:变量 '__afx_condVal' 构造后没有变化,将其标记为 const (con.4)。
我确实用Microsoft 提出了它。底层宏ENSURE_THROW:
#define ENSURE_THROW(cond, exception) \
do { int __afx_condVal=!!(cond); ASSERT(__afx_condVal); if (!(__afx_condVal)){exception;} } __pragma(warning(suppress:4127)) while (false)
...只需要const这个词即可解决。
我可以拨打其他电话吗,因为我知道 ASSERT 仅适用于 DEBUG 构建。
【问题讨论】:
-
确保很好documented
-
@Jabberwocky 感谢您的链接。我试过
ENSURE并没有出现... -
第一次使用 mfc 确保宏 访问 google
标签: visual-c++ mfc code-analysis