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

Check if header is included using preprocessing directives?

本文关键字:包含标 是否 检查 预处理 指令      更新时间:2023-10-16

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

我想实现这样的事情:

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

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

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

你可以简单地利用assert()本身是一个宏的事实,所以你可以做一个

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

当然,如果有人定义自己的assert宏,这也会抱怨,严格来说,只要他们不包含任何标准标头,这将是一件合法的事情......

归根结底,我会重新考虑你认为你在这里想做的事情。如果您处于必须确保某人不包含特定标准标头的地步,那么您很可能走错了路,如果您退后一步并从头开始重新思考,很可能会找到一种更好但完全不同的方法。所以

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

几乎可以肯定。但它与根据是否包含标准库的特定部分来检测和调整行为没有任何关系......