C中“ifndef”和“if!defined”之间的区别?

时间:2011-12-23 15:27:49

标签: c include-guards

我在同一个C源文件中看到了#ifndef ABC#if !defined (ABC)

他们之间有细微差别吗? (如果是风格问题,为什么有人会在同一个文件中使用它们)

2 个答案:

答案 0 :(得分:38)

不,当用这种方式时,两者之间没有区别。当初始defined()或其中一个#if条件需要更复杂的测试时,后一种形式(使用#elif)非常有用。 #ifdef仍然有用,但在这种情况下使用#if defined()可能会更清楚。例如,如果需要测试是否定义了多个宏,或者它是否等于特定值。

方差(在文件中使用两者)可能取决于使用中的特定细微差别,如上所述,或者仅仅是不良做法,因为它们不一致。

答案 1 :(得分:5)

在您提供的上下文中,它们是相同的:您只是检查是否存在一个宏标识符。

但是,#if表单允许您评估表达式,这可能很有用。