【问题标题】:Why would anyone want to use #if 0 && something?为什么有人想使用 #if 0 && 东西?
【发布时间】:2014-02-12 08:51:10
【问题描述】:

我在GraphSketcher code(iOS 和 OSX)代码上达到了顶峰,我看到了这个:

#if 0 && defined(DEBUG_bungi)
#endif

我可以接受#if 0as a way to comment code,但是如果条件总是为假,为什么还要使用AND?

that usage can be found here 的一个示例,尽管在整个代码中都使用了它。

【问题讨论】:

  • 这样你就可以在某个地方添加#define 0 1 并毁掉每个人的一天。
  • 您可以链接到 repo 中的特定文件以提供更多上下文。
  • 是我在代码中看到的第一件事
  • 好的,我找到了。您巧妙地忽略了#if#endif 之间的位不为空这一事实。这样您就可以快速打开部件,但仅限于特定的调试版本。
  • @moldbnilo 它在代码中被大量使用,这就是为什么我不想专注于特定文件,因为它可能会影响答案。为了示例,我在问题中添加了一个文件。

标签: c


【解决方案1】:

仍然是临时注释代码的一种方式。

如果您想使用#if 0 来注释恰好是预先存在的#if 块的代码块,这似乎是一种明智的做法。您不会将原始 #if 逻辑丢失到历史记录中,完成后只需删除 0 &&

你也可以写:

#if 0
#if defined(DEBUG_bungi)
#endif
#endif

但这可以说更恶心。

【讨论】:

  • 禁用de DEBUG_bungi不是更好吗?在这种情况下,我只找到一种情况,他们会使用#ifdef DEBUG_bungi。其余的总是有#if 0 && defined(DEBUG_bungi)
  • @TiagoAlmeida:也许那个宏是由另一个更包罗万象的宏控制的,他们不想禁用整个东西,但是只是这个单独的块代码?不知道具体的代码库是不可能合理化的,但老实说,我不会浪费太多时间去思考它。
  • @TiagoAlmeida 只有0 && 必须添加以取消注释,并且不需要添加相应的#endif。很聪明,真的
  • @LightnessRacesinOrbit 感谢您的回答。可能是我想多了:)
【解决方案2】:

暂时注释代码已经有#if?一旦您想恢复代码,请删除 0 && 并保留其余部分。

话虽如此,将这样的东西提交给版本控制有点难看。

【讨论】:

  • 为什么要删除它?只需修改一个字符即可if 1 && ...
  • @Brandin:因为丑?除非您认为您想在将来再次再次禁用这段代码,在这种情况下,可能是时候添加一个额外的#define 符号了。​​
  • 我同意。但是请记住,这里的情况是它的其他人的代码在整个过程中都在使用这种模式。我不认为它对个人有用,但如果你改变它,那么当我们这样做的时候,为什么我们不也检查每个if 0 && 并给每个人一个特殊的名字。如何将类/结构属性重命名为 camelCase 或切换到使用 One True Brace Style 等。
  • 好吧,我没有看有问题的代码。如果这是一种模式,最好暂时保留它。
猜你喜欢
  • 2023-02-07
  • 2011-04-05
  • 2011-07-19
  • 2018-01-08
  • 1970-01-01
  • 2019-08-17
  • 2020-09-07
  • 2019-05-26
  • 1970-01-01
相关资源
最近更新 更多