C “的目的是什么?”#如果0…#endif“;宣言

C “的目的是什么?”#如果0…#endif“;宣言,c,if-statement,directive,C,If Statement,Directive,现在我又糊涂了。 在我们的旧C代码中,我发现了一些奇怪的部分,一个似乎打印到终端的转储函数,我想知道您是否可以解释为什么使用这个“#if 0” 我猜这是一种注释代码的老方法 #if 0 dump(b, cnt) char *b; int cnt; { int i; if (cnt == 0) return; for (i=0; i < cnt; i++, b++){ if ((i % 16) == 0) printf("\n"

现在我又糊涂了。 在我们的旧C代码中,我发现了一些奇怪的部分,一个似乎打印到终端的转储函数,我想知道您是否可以解释为什么使用这个“#if 0”

我猜这是一种注释代码的老方法

#if 0
dump(b, cnt)
     char *b;
     int cnt;
{
  int i;

  if (cnt == 0)
    return;

  for (i=0; i < cnt; i++, b++){
    if ((i % 16) == 0)
      printf("\n");
    printf("0x%02x ", *b);
  }
}
#endif
#如果0
转储(b,cnt)
char*b;
int-cnt;
{
int i;
如果(cnt==0)
返回;
对于(i=0;i
这不是一种“老办法”,而是一种单独的办法。这将使用预处理器剪切包含的行,因此编译器永远不会看到它们

这是“功能切换”的一种极端形式;您经常看到这样的代码

#if defined SOME_HANDY_FEATURE
void use_some_handy_feature(int handyness)
{
  ...
}
#endif
但是在这里,
#define
被literal
0
替换,这当然是false,因此代码块被删除


它很方便,因为即使删除的代码包含注释,它也能工作,这是正常的
/**/注释不是因为它们不嵌套。

它允许您轻松地启用/禁用一段代码(例如,用于测试目的)。并且您需要考虑这不等同于评论。谢谢各位,我的直觉是正确的。对不起,我错过了以前有人问过的;(我的错。