2016-05-23 59 views
2

我希望能夠做這樣的事情使用Visual C++編譯器(VC12):有一個Visual C++預定義的預處理器宏,讓你知道當編譯器優化

// If we have compiled with O2 
#ifdef _O2_FLAG_ 
bool debug_mode = false; 

// If we are in dirty slow non optimized land 
#else 
bool debug_mode = true; 
#endif 

但我無法找到一個預定義的宏爲此目的。

語境:

的DEBUG_MODE標誌使用,如:

if (!debug_mode && search_timer->seconds_elapsed() > 20) { 
    return best_result_so_far; 
} 

的問題是,在我通過這個步驟調試實例不斷失敗,並彈了我,因爲奇怪的是它需要我通過代碼的時間比CPU通常要長很多:-)

如果在調試的時候有一些基礎時鐘會暫停,那也可以解決我的問題。目前我使用兩個調用std :: chrono :: high_res_clock :: now()之間的區別。

編輯:

針對一些意見解釋爲什麼我不想做我想做的事,我或許應該改寫了一個問題,簡單地說:有沒有gcc的__optimize__在CL的等效?

+1

即使它確實存在,預處理器也不能告訴你編譯器*會*優化一個翻譯單元(假設沒有優化可以完成),只是它*可能* – StoryTeller

+0

你正在做這個錯誤辦法。您需要提高調試技能(例如,使用跟蹤點而不是斷點等)。 – IInspectable

+0

使用編譯器開關檢查調試模式。幾乎每個IDE都有可能使用不同的編譯器選項來設置調試和發佈模式。 – Lundin

回答

4

您可以使用_DEBUGNDEBUG來檢測調試配置。這在技術上並不意味着與優化標誌相同的東西,但99%的時間足夠了。

另一種選擇是將預處理器定義添加到項目中。

+0

不幸的是,我不得不使用調試信息來構建大多數時候我使用優化構建以及探測器正常工作,或者我會這樣做。看起來像visual C++與gcc相比,只有很少這樣的宏。我想知道我是否錯過了一個完整的網頁。 – sji