Можно ли использовать оператор ConstexPR, если в качестве подходящего замены макроса отладки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли использовать оператор ConstexPR, если в качестве подходящего замены макроса отладки?

Сообщение Anonymous »

Является ли Debug_log , полностью написанный как A, если contexpr (рекомендуется) заменить традиционную реализацию макроса журнала отладки?
Рассмотрим следующий код, составленный с -o3 и -ddebug_on , определяемый как 0 или 1.

Код: Выделить всё

#include 

constexpr bool debug_on = DEBUG_ON;

void debug_log(char *message) {
if constexpr (debug_on) {
printf("Debug: %s\n", message);
}
}

void foo() {
debug_log("FOO");
printf("Foo stuff\n");
}

void bar() {
debug_log("BAR");
printf("Bar stuff\n");
}

int main() {
bar();
foo();
bar();
}
(Godbolt: https://godbolt.org/z/gjvjo81bq)
Мы ожидаем, что функция Debug_log будет полностью пустой, когда отладка отключена, и действительно функция включена в библиотеку в виде единичной инструкции. Функции FOO и BAR больше не содержат прыжков на функцию DEBUG_LOG . Тем не менее, мы все еще видим символ журнала отладки, присутствующий в бинарном объекте (или в окончательном связанном двоичном). Что произойдет, если Debug_log был в другой единице перевода, будет ли он все еще оптимизирован полностью? Если бы это был традиционный журнал на основе макросов, мы бы полностью удалили, потому что не существует функционального вызова, а просто просто текстовая замена.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... a-debug-ma
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»