C语言中"ifndef"和"if !defined"有什么区别?

53

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

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

2个回答

47

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

在同一个文件中使用这两种方式的差异可能取决于使用中的特定微妙之处,如上所述,或者只是糟糕的实践,因为不一致。


8
在您提供的情境下,它们是相同的:您只是检查一个宏标识符的存在。
然而,#if形式允许您评估表达式,这可能会很有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接