这两个代码之间有什么区别:
#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;
}
他们完全相同吗?
答案 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
; - )。