今天我发现我的一些断言函数仍然存在并且在发布版本中被调用。这是我的断言函数的一个例子。
bool const isDebugMode()
{
return false; // Will be controlled by preprocessor flag.
}
void assertWithReason(bool const condition, std::string const reason = "")
{
if (isDebugMode() and not condition)
{
abort();
}
}
我认为条件表达式的一些副作用是阻止消除断言调用。
例如,
assertWithReason(glGetError() == GL_NO_ERROR);
我预计这个断言调用会被消除,但事实并非如此。因为它是在检查调试构建之前执行的。
我不确定 C++ 如何处理这种情况,但由于 C++ 是非常严格的语言,除非我放置一些特殊标志,否则它似乎不会被淘汰。无论如何,我故意写了要在发布版本中删除的断言。
是否可以编写一个在 C++ 的发布版本中肯定被删除的函数?我当然可以使用预处理器宏,但我想尽可能避免使用预处理器宏。
我正在使用 Clang,编译器特定的扩展(例如 GCC 属性)也可以。