我使用一些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