Директива об отладке и препроцессоре - PullRequest
6 голосов
/ 12 июня 2011

Для отладки в моем приложении много вызовов функции журнала отладки.Конечно, в рабочей версии эти отладочные вызовы должны быть пропущены.Вместо того, чтобы писать:

#if DEVEL == 1
    Log::debug(...);
#endif

вокруг всех вызовов функции отладки, я решил написать следующее в самой функции отладки:

#if DEVEL != 1
    return;
#endif

Будет ли накладные расходы на вызов бесполезной функцииизбегать компилятором или мне лучше использовать (многие уродливые) #if #endif конструкции из соображений производительности?

Ответы [ 3 ]

7 голосов
/ 12 июня 2011

Вместо того, чтобы беспокоиться об оптимизаторе, вы можете сделать простой трюк:

#if DEVEL == 1
#define LOG_DEBUG(...) Log::Debug(__VA_ARGS__)  // variadic macro
#else
#define LOG_DEBUG
#endif

Теперь используйте LOG_DEBUG везде, чтобы было проще.

5 голосов
/ 12 июня 2011

Если функция доступна для встраивания (например, она реализована в заголовке), тогда оптимизатор не будет иметь проблем с избавлением от вызова функции и, таким образом, не будет лишних затрат.

2 голосов
/ 12 июня 2011

Почему бы вам не проверить?

С gcc просто скомпилируйте с -S и посмотрите на вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...