46

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

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

4

2 回答 2

43

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

如上所述,差异(在文件中同时使用)可能取决于使用中的特定细微差别,或者只是由于不一致而导致的不良实践。

于 2011-12-23T15:30:16.553 回答
6

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

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

于 2011-12-23T15:32:57.370 回答