// custom_printf.h #ifndef CUSTOM_PRINTF_H #define CUSTOM_PRINTF_H #include #include #ifdef __cplusplus #include #include // 假设这些是你管理输出的列表 extern std::list errorList; extern std::list warnList; extern std::list normalList; extern std::list debugList; // 开关 extern bool errorOutputEnabled; extern bool warnOutputEnabled; extern bool normalOutputEnabled; extern bool debugOutputEnabled; void redirectErrorOutput(bool enabled); void redirectWarnOutput(bool enabled); void redirectNormalOutput(bool enabled); void redirectDebugOutput(bool enabled); extern pthread_mutex_t errorListMutex; extern pthread_mutex_t warnListMutex; extern pthread_mutex_t normalListMutex; extern pthread_mutex_t debugListMutex; // **声明原始 echo_msgX(),让编译器知道它们存在** void real_echo_msg(const char *format, ...); // **拦截所有 `echo_msgX()`,让它同时存入 `normalList`** #define echo_msgX(format, ...) \ do { \ real_echo_msg(format, ##__VA_ARGS__); /* 调用原始 `echo_msgX()` */ \ char buffer[1024]; \ snprintf(buffer, sizeof(buffer), format, ##__VA_ARGS__); \ pthread_mutex_lock(&normalListMutex); \ normalList.push_back(buffer); \ pthread_mutex_unlock(&normalListMutex); \ } while (0) // **宏自动展开不同的 `echo_msg` 变体** #define echo_msg1 echo_msgX #define echo_msg2 echo_msgX #define echo_msg3 echo_msgX #define echo_msg4 echo_msgX #define echo_msg5 echo_msgX #define echo_msg6 echo_msgX #define echo_msg7 echo_msgX #define echo_msg8 echo_msgX #define echo_msg9 echo_msgX #define echo_msg10 echo_msgX #define echo_msg11 echo_msgX // **如果有更多的 `echo_msgX()`,继续定义** extern "C" { #endif // 自定义的 printf 函数 int customPrintf(const char* format, ...); #ifdef __cplusplus } #endif // 使用宏将 printf 替换为 customPrintf #define printf customPrintf #endif // CUSTOM_PRINTF_H