C ++ одиночное условие выполнения с использованием исправлений - PullRequest
2 голосов
/ 05 июля 2019

Я пишу журналы для своего приложения, используя boost::log. Я могу передать переменную среды, чтобы выбрать уровень ведения журнала следующим образом:

LOG_LEVEL=3 ./my_app

Каждый раз, когда я использую LOG_INFO или LOG_TRACE, макрос расширяется до состояния, которое проверяет выбранный уровень журнала и, если он совпадает, фактически печатает журнал. В противном случае ничего не произойдет.

В настоящее время я пишу свою собственную библиотеку журналов на основе boost::log, чтобы добавить свои потребности. Я не вижу смысла проверять уровень журнала каждый раз, и я хотел бы пропатчить функцию после первой, если пропустить проверку в следующий раз. Например:

Я бы обернул макрос LOG_INFO в свою собственную функцию. Первым делом в этой функции проверяется выбранный уровень журнала. Если уровень не совпадает, я бы заменил начало функции на ret. Таким образом, я не буду проверять это условие снова.

  1. Как я могу создать такую ​​логику, используя gcc в Linux? Я не знаю с чего начать.
  2. Компилятор может встроить мои функции, даже если он находится в другом файле cc во время компоновки. Если он сделает это (и сделает это), мой код операции ret разрушит все приложение. Любые предложения, что я могу сделать?

Спасибо

...