预处理程序指令中的行是否正确?

时间:2017-02-08 15:50:33

标签: c c-preprocessor

这两个代码之间有什么区别:

#define check 0

int main(void)
{
#if check
this is a normal line
#endif
return 0;
}

和这一个:

int main(void)
{
/*
this is a normal line
*/
return 0;
}

他们完全相同吗?

2 个答案:

答案 0 :(得分:0)

不,他们不一样。

#define check 0

int main(void) {
  #if check
  this is a normal line
  #endif

  return 0;
}

此段在编译时完全取决于预处理check值的值,目前位于0。由于在预处理if-endif之间编译代码的唯一条件是0|1的{​​{1}}值,因此在运行时它们将是相同的。但是,如果您要将check更改为check,它也会编译条件行。

在编译时,第一个段处理1,其中第二个段显然是从来没有,只是忽略了注释。

答案 1 :(得分:-1)

是的,但第一个代码不会编译为#define check; - )。