gpt4 book ai didi

c++ - 使用 c/c++ 宏禁用多行语句

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:45 25 4
gpt4 key购买 nike

是否可以根据某些定义使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com