【发布时间】:2012-01-26 21:52:19
【问题描述】:
我在同一个 C 源文件中看到了 #ifndef ABC 和 #if !defined (ABC)。
它们之间有细微的区别吗? (如果是风格问题,为什么有人会在同一个文件中使用它们)
【问题讨论】:
标签: c include-guards
我在同一个 C 源文件中看到了 #ifndef ABC 和 #if !defined (ABC)。
它们之间有细微的区别吗? (如果是风格问题,为什么有人会在同一个文件中使用它们)
【问题讨论】:
标签: c include-guards
不,以这种方式使用两者之间没有区别。当初始#if 或后续#elif 条件之一需要更复杂的测试时,后一种形式(使用defined())很有用。 #ifdef 仍然可以工作,但在这种情况下使用 #if defined() 可能会更清楚。例如,如果它需要测试是否定义了多个宏,或者它是否等于特定值。
差异(在文件中同时使用)可能取决于使用中的特定细微差别,如上所述,或者只是由于不一致而导致的不良做法。
【讨论】:
在您提供的上下文中,它们是相同的:您只是检查一个宏标识符是否存在。
不过,#if 表单允许您评估表达式,这很有用。
【讨论】: