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

one*_*ach 42 c include-guards

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

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

Dan*_*ego 39

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

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


Jer*_*ner 6

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

但是,#if表单允许您计算表达式,这可能很有用.