C中“ifndef”和“if!defined”的区别?
我在同一个C源文件中看到了#ifndef ABC
和#if !defined (ABC)
。
他们之间有微妙的区别吗? (如果是风格问题,为什么有人在同一个文件中使用它们)
不,使用这种方式时两者没有区别。 当最初的#if
或其后的#elif
条件之一需要更复杂的testing时,后一种forms(使用defined()
)是有用的。 #ifdef
仍然可以工作,但在这种情况下使用#if defined()
可能会更清晰。 例如,如果需要testing是否定义了多个macros,或者是否等于特定值。
如上所述,差异(在一个文件中使用)可能取决于具体的使用细节,或者由于不一致而只是不好的做法。
在上下文中,它们是相同的:只是检查是否存在一个macros标识符。
但是,#if表单允许您评估expression式,这可能很有用。