2017-02-08 47 views
-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; 
} 

他们是一模一样

+0

你知道,你可以运行[code](https://ideone.com/Ua8B2n),它们是不一样的。 – George

+0

@乔治你的评论就像“只看他们他们是不一样的”:/ – Sabrina

+2

@Sabrina我无法想象为什么code'ud是有用的,但一个常用的习惯用来代替评论代码(代码不工作或需要改变)是使用'#ifdef 0'。无论如何,在第一个例子中,封装了“#if check”的代码不会被编译为“check”为false。在第二种情况下,没有宏检查,因此main中的任何内容(假设它是有效的)都将运行。 – George

回答

-1

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

0

不,他们是不一样的。

#define check 0 

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

    return 0; 
} 

该段,在编译时,是完全依赖于预处理check值的值,在当前0。由于在预处理if-endif之间编译代码的唯一条件是0|1check,因此在运行时它们将保持不变。但是,如果要将check更改为1,它也会编译条件行。

在编译时,第一个分段处理了#define check 0,第二个显然不必忽略注释。