2016-05-23 3 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; 
} 

Проблема в том, что в случае отладки, что я шаг через это постоянно терпит неудачу и бомбы меня, потому что странно это берет меня намного больше времени, чтобы пройти через код, чем процессор обычно проходит через него :-)

Если есть некоторые базовые часы, которые приостанавливаются при отладке, это также решит мою проблему. В настоящее время я использую разницу между двумя вызовами в std :: chrono :: high_res_clock :: now().

EDIT:

В ответ на несколько замечаний, объясняющих, почему я не хочу делать то, что я хочу делать, я, возможно, следует перефразировать вопрос, как просто: Есть ли эквивалент ССЗ __optimize__ в п?

+1

Даже если это действительно существовало, препроцессор не может сказать вам, что компилятор * будет * оптимизировать блок перевода (скажем, если оптимизация не может быть выполнена), только то, что он * может * – StoryTeller

+0

Вы собираетесь сделать это неправильно путь. Вам необходимо улучшить свои навыки отладки (например, использовать точки трассировки вместо точек останова и т. Д.). – IInspectable

+0

Используйте переключатель компилятора, чтобы проверить режим отладки. Практически каждый IDE имеет возможность устанавливать режим отладки и выпуска с различными параметрами компилятора. – Lundin

ответ

4

Чтобы определить конфигурацию отладки, вы можете использовать либо _DEBUG, либо NDEBUG. Это технически означает не то же самое, что флаг оптимизации, но в 99% случаев это должно быть достаточно.

Другим вариантом было бы добавить определение препроцессора в проект самостоятельно.

+0

К сожалению, мне приходится строить с помощью отладочной информации, которую я собираю с оптимизацией, чтобы профилировщик работал правильно, или я бы это сделал. Кажется, что visual C++ дает очень мало таких макросов, как в сравнении с gcc. Я задавался вопросом, пропустил ли я где-нибудь приятную веб-страницу. – sji