这不是解决特定问题的典型问题,而是大脑练习,但我想知道是否有人有解决方案.
在开发中,我们经常需要禁用或切换代码的某些部分以检查不同的方法.要做到这一点,我们使用评论或#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(); /**/.请谨慎使用此类评论技巧.
Gig*_*igi 32
#if 0
...disabled code here
#endif
Run Code Online (Sandbox Code Playgroud)
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)
当然,这应该永远不会超越"只是检查出来"阶段......
ose*_*kar 11
预处理器if-else也有效
#if 1
// ... enabled if 1
#else
// ... enabled if 0
#endif
Run Code Online (Sandbox Code Playgroud)
有时我使用以下技巧在两个懒惰的评论之间切换.
//* <-- remove the first slash
[code block 1]
/*/
[code block 2]
//*/
Run Code Online (Sandbox Code Playgroud)
好吧,如果在最终确定之前需要禁用一次或两次的代码,我更喜欢使用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)