能否实现通过判断函数入参的值决定代码是否参与编译?
先上代码例子
#define LOG_CRITICAL 0
#define LOG_ERROR 1
#define LOG_WARNING 2
#define LOG_INFO 3
#define LOG_DEBUG 4
void LogOutput(unsigned char LogLevel, const char *OutStr)
{
printf("%s",OutStr);
}
void TestFunc()
{
LogOutput(LOG_CRITICAL,"LOG_CRITICAL");
LogOutput(LOG_ERROR,"LOG_ERROR");
LogOutput(LOG_WARNING,"LOG_WARNING");
LogOutput(LOG_INFO,"LOG_INFO");
LogOutput(LOG_DEBUG,"LOG_DEBUG");
}
代码例子说明,首先定义了5个log级别,TestFunc函数中分别使用5个级别作为入参调用LogOutput函数。
最近公司在做一个项目,codesize很紧张,没法做到所有级别的log全开,只能开一部分log,工程中需要输出log的位置非常之多,不想每行代码都加宏开关。我想问,有没有什么办法能使编译器判断出log等级后不编译不符合输出的log等级对应的代码
类似于,我现在只想输出ERROR级别以上的Log,能否对编译器进行一些设置使其认为TestFunc函数中后3行代码被注释掉,这个过程不想通过手动注释和添加宏开关,单纯从设置编译选项的角度能否实现?
void TestFunc()
{
LogOutput(LOG_CRITICAL,"LOG_CRITICAL");
LogOutput(LOG_ERROR,"LOG_ERROR");
//LogOutput(LOG_WARNING,"LOG_WARNING");
//LogOutput(LOG_INFO,"LOG_INFO");
//LogOutput(LOG_DEBUG,"LOG_DEBUG");
}