我使用一些Qt代码,增加了一个VERIFY宏,看起来是这样的:转换宏到内联函数
#define VERIFY(cond) \
{ \
bool ok = cond; \
Q_ASSERT(ok); \
}
然后,该代码可以使用它同时又是某些病情反而评估,如:
Q_ASSERT(callSomeFunction()); // callSomeFunction not evaluated in release builds!
VERIFY(callSomeFunction()); // callSomeFunction is always evaluated
不喜欢宏,我反而喜欢把它变成一个内联函数:
inline VERIFY(bool condition)
{
Q_ASSERT(condition);
}
但是,在发布版本中,我担心编译器会优化所有对此函数的调用(因为Q_ASSERT
实际上不会做任何事情)。我是不必要地担心或者这可能取决于优化标志/编译器/等。?我想我可以改变它:
inline VERIFY(bool condition)
{
condition;
Q_ASSERT(condition);
}
但是,再次,编译器可能是聪明的,可以忽略该调用。
对于调试版本和发布版本,这种内联方案是否安全?
我决定不承担风险。谢谢! – Rob 2010-06-16 20:36:12