Часто бывает нужно понять, какие функции вызываются, в каком порядке и с какими параметрами. Вручную вставлять
std::cout — неудобно. Вместо этого используем RAII-макрос с выводом в консоль:
#include <iostream>
#include <string>
struct FunctionLogger {
std::string func_name;
FunctionLogger(const std::string& name) : func_name(name) {
std::cout << ">> Entering: " << func_name << '\n';
}
~FunctionLogger() {
std::cout << "<< Exiting: " << func_name << '\n';
}
};
#define LOG_FUNCTION() FunctionLogger logger(__FUNCTION__)
Теперь в любой функции достаточно просто написать
LOG_FUNCTION();, и вы получите автоматический лог при входе и выходе:
void do_work() {
LOG_FUNCTION();
// Работаем...
}
Это особенно удобно в больших проектах, когда нужно быстро локализовать ошибку или понять структуру вызовов.
Можно доработать: лог в файл, потокобезопасность, включение по флагу компиляции и т.д.
📲 Мы в MAX
➡️ @cpp_geek