是否可以根据某些定义使用 c/c++ 预处理器禁用代码块,而无需使用 #ifdef#endif
检测代码?
// if ENABLE_TEST_SONAR is not defined, test code will be eliminated by preprocessor
TEST_BEGIN(SONAR)
uint8_t sonar_range = get_sonar_measurement(i);
TEST_ASSERT(sonar_range < 300)
TEST_ASSERT(sonar_range > 100)
TEST_END
功能等同于如下内容:
#ifdef TEST_SONAR
serial_print("test_case sonar:\r\n");
uint8_t sonar_range = get_sonar_measurement(i);
serial_print(" test sonar_range < 300:%d\r\n", sonar_range < 300);
serial_print(" test sonar_range > 100:%d\r\n", sonar_range > 100);
#endif TEST_SONAR
最佳答案
只能使用#ifdef
或#if
禁用多行,但可以使用宏禁用单行。注意多行可以用\
#ifdef DOIT
#define MYMACRO(x) \
some code \
more code \
even more \
#else
#define MYMACRO(x)
#endif
然后当您调用 MYMACRO
时,该代码将根据是否定义了 DOIT
而包含或不包含
这是最接近的,经常用于调试代码
编辑:一时兴起,我尝试了以下方法,它似乎有效(在 MSVC++ 和 g++ 中):
#define DOIT
#ifdef DOIT
#define MYMACRO(x) x
#else
#define MYMACRO(x)
#endif
void foo(int, int, int)
{
}
int main(int, char **)
{
int x = 7;
MYMACRO(
if (x)
return 27;
for (int i = 0; i < 10; ++i)
foo(1, 2, 3);
)
}
关于c++ - 使用 c/c++ 宏禁用多行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31192189/