-3
是什么这两个码的区别:预处理器指令中的行是否正确?
#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;
}
他们是一模一样?
是什么这两个码的区别:预处理器指令中的行是否正确?
#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;
}
他们是一模一样?
是的,只是第一个代码不能编译为#define check
;-)。
不,他们是不一样的。
#define check 0
int main(void) {
#if check
this is a normal line
#endif
return 0;
}
该段,在编译时,是完全依赖于预处理check
值的值,在当前0
。由于在预处理if-endif
之间编译代码的唯一条件是0|1
值check
,因此在运行时它们将保持不变。但是,如果要将check
更改为1
,它也会编译条件行。
在编译时,第一个分段处理了#define check 0
,第二个显然不必忽略注释。
你知道,你可以运行[code](https://ideone.com/Ua8B2n),它们是不一样的。 – George
@乔治你的评论就像“只看他们他们是不一样的”:/ – Sabrina
@Sabrina我无法想象为什么code'ud是有用的,但一个常用的习惯用来代替评论代码(代码不工作或需要改变)是使用'#ifdef 0'。无论如何,在第一个例子中,封装了“#if check”的代码不会被编译为“check”为false。在第二种情况下,没有宏检查,因此main中的任何内容(假设它是有效的)都将运行。 – George