禁用部分代码的简单方法

kol*_*nda 34 c c++

这不是解决特定问题的典型问题,而是大脑练习,但我想知道是否有人有解决方案.

在开发中,我们经常需要禁用或切换代码的​​某些部分以检查不同的方法.要做到这一点,我们使用评论或#defines,但我最喜欢的是:

//*
[code here]
//*/
Run Code Online (Sandbox Code Playgroud)

现在当你只删除第一个斜杠时,代码将被注释掉.

问题:有没有办法实现类似的if-else代码切换?我试图找到它,但我总是有一些问题,无法找到一个有效的解决方案.

也许你知道任何类似的技巧吗?

pb2*_*b2q 54

包装代码可以解决#if 0问题,但是您仍然需要编辑代码来启用/禁用它.这比使用评论块好多了.

请注意,您还可以使用已定义的预处理器常量:

#ifdef ENABLE_TESTS
// code that you want to run ONLY during tests 
#endif
Run Code Online (Sandbox Code Playgroud)

现在,在构建代码时,您可以在构建过程中有选择地定义/取消定义此常量 - IDE/makefile/build script/command-line - 而无需编辑代码:

$ gcc -DENABLE_TESTS source.c
Run Code Online (Sandbox Code Playgroud)

我已经添加了这个答案来平衡所有早期#if 0答案,但是从接受的答案中得出的结构是对特定问题的最佳答案:/**/ foo(); /*/ bar(); /**/.请谨慎使用此类评论技巧.

  • 是的,这更好.这是一个有用的答案.+1. (3认同)
  • @LightyearBuzz在java中没有预处理器,没有.但java**确实**有一个类似的`-D`命令行开关,它允许你在命令行上传递`System`属性值.您需要求助于标准运行时`if/then`测试,例如:`if(System.getProperty("key","defaultValue"))`.C`#if /#endif`是_compile-time_. (2认同)

Gig*_*igi 32

#if 0
...disabled code here
#endif
Run Code Online (Sandbox Code Playgroud)

  • 使用#if 0表示禁用代码,#if 01表示启用允许通过键入单个字符(删除或1)而不是两个(删除和新值)在两种情况之间切换. (3认同)

Mic*_*urr 28

我不确定我应该发布这个,因为它不是我认为是"好代码"的东西,但我承认我已经使用以下技术作为一种快速肮脏的方式,能够在两个小片段之间快速切换我刚刚检查出来的代码:

// in the following , foo() is active:
/**/ foo(); /*/ bar(); /**/
Run Code Online (Sandbox Code Playgroud)

现在只需删除前面的一个星号:

// now bar() is active:
/*/ foo(); /*/ bar(); /**/
Run Code Online (Sandbox Code Playgroud)

当然,这应该永远不会超越"只是检查出来"阶段......

  • @kolenda:`#if 0`和`#else`做同样的事情,它更清洁...... (12认同)

ose*_*kar 11

预处理器if-else也有效

#if 1
  // ... enabled if 1
#else
  // ... enabled if 0
#endif
Run Code Online (Sandbox Code Playgroud)


Nic*_*kis 7

有时我使用以下技巧在两个懒惰的评论之间切换.

//* <-- remove the first slash
[code block 1]
/*/
[code block 2]
//*/
Run Code Online (Sandbox Code Playgroud)


Don*_*alo 6

好吧,如果在最终确定之前需要禁用一次两次的代码,我更喜欢使用IDE提供的热键来注释该代码,然后注释.是的,我需要先选择代码块,但我不喜欢每次我需要禁用一部分代码时,再包含一个调试变量/预处理器指令/ if语句.这种情况恰好发生在大多数情况下.

另一方面,如果我需要在2个代码块之间反复切换以找到正确的东西,那么我使用if (0)/ if (1)来禁用/启用代码块.

[code block 1]
Run Code Online (Sandbox Code Playgroud)

后来

if (0)
{
    [code block 1]
}
else
{
    [code block 2]
}
Run Code Online (Sandbox Code Playgroud)


小智 5

使用一些预处理器逻辑来帮助您:

#if 0
    //code goes here
#endif
Run Code Online (Sandbox Code Playgroud)

请享用