使用预处理指令检查是否包含标头?

时间:2018-09-08 10:05:23

标签: c++ c-preprocessor

是否可以使用预处理指令来测试是否包含文件?

我想实现以下目标:

#ifincluded assert.h
#error "Should not include assert.h"
#endif

此刻,我知道assert.h已定义_ASSERT_H来解决此问题。在这种情况下,我可以使用#ifdef _ASSERT_H。问题在于这是特定于实现的。

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:5)

您可以简单地利用nav ul li a:hover{ border:0; background-color:green; color:yellow; border-radius: 26px; padding: 60px 10px; } @media screen and (max-width: 700px) { nav ul li:hover{ background-color: black; width: 100%; border-radius: 20px; } } 本身是一个宏的事实,因此您可以执行

assert()

如果有人定义了自己的#ifdef assert #error "Should not include assert.h" #endif 宏,这当然也会引起抱怨,严格来说,这样做as long as they don't include any standard header是合法的事…

最终,我会重新考虑您认为您要在此处进行的操作。如果您必须确保某人不包括特定的标准标头,那么您很可能走错了路,并且如果您只是采用某种方法,那么很有可能找到一种更好但完全不同的方法退后一步,从一开始就重新思考。所以

  

有没有更好的方法来实现这一目标?

几乎可以肯定。但这与检测和调整行为无关,这取决于是否已包含标准库的特定部分……