" #if 0 ...#endif"的目的是什么?宣言

时间:2017-02-22 10:14:52

标签: 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");
    printf("0x%02x ", *b);
  }
}
#endif

1 个答案:

答案 0 :(得分:1)

它不是一种旧的方式,它是一种独立的方式。这使用预处理器来删除包含的行,因此编译器永远不会看到它们。

这是一种极端形式的&#34;功能切换&#34 ;;通常你会看到像

这样的代码
#if defined SOME_HANDY_FEATURE
void use_some_handy_feature(int handyness)
{
  ...
}
#endif

但是这里#define被文字0取代,当然这是假的,所以删除了代码块。

它很方便,因为即使删除的代码包含注释也能正常运行,但正常的/* ... */注释不会包含注释,因为它们不会嵌套。