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

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

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

不,使用这种方式时两者没有区别。 当最初的#if或其后的#elif条件之一需要更复杂的testing时,后一种forms(使用defined() )是有用的。 #ifdef仍然可以工作,但在这种情况下使用#if defined()可能会更清晰。 例如,如果需要testing是否定义了多个macros,或者是否等于特定值。

如上所述,差异(在一个文件中使用)可能取决于具体的使用细节,或者由于不一致而只是不好的做法。

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

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