使用预处理指令检查是否包含标头?
Check if header is included using preprocessing directives?
是否可以使用预处理指令测试文件是否已包含?
我想实现这样的事情:
#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
宏,这也会抱怨,严格来说,只要他们不包含任何标准标头,这将是一件合法的事情......
归根结底,我会重新考虑你认为你在这里想做的事情。如果您处于必须确保某人不包含特定标准标头的地步,那么您很可能走错了路,如果您退后一步并从头开始重新思考,很可能会找到一种更好但完全不同的方法。所以
有没有更好的方法来实现这一目标?
几乎可以肯定。但它与根据是否包含标准库的特定部分来检测和调整行为没有任何关系......
相关文章:
- 在CMake中使用find_package时,是否会显式包含标头
- GCC 包含标头(使用"-include")CMake 未检测到的更改
- 使用预处理指令检查是否包含标头?
- 更智能地在C++中包含保护,以便在不同的命名空间中多次包含标头
- 如何在 c++ 中有条件地包含标头?
- main.cpp 如何知道包含标头的源文件?
- 有没有办法告诉 g++ 编译器,而不是在某个 -I 路径中查找包含标头
- 下标是否在分配运算符的右侧进行评估
- QT 如何包含标头和 cpp 文件
- 在 c++ 中,如果包含标头,为什么我会收到'does not a name of type'错误?
- CLion 无法解析类型 std::unordered_map,即使它提示我包含标头并且编译工作
- 是否可以链接到,包括和使用静态库,而无需额外包含标头/文件
- 为什么包含标头会导致"use of auto before deduction of auto"错误?
- 如何告诉qmake在从dbus xml生成文件时包含标头
- GCC Bug,使用尖括号通过宏包含标头时"linux"路径中的字符串"<>"替换为 "1"
- 如何从平台SDK明确包含标头文件
- 包含标头中的搜索路径因编译器而异
- #include < Dbghelp.h> 不包含标头
- 在 main.cpp 以外的文件中包含标头时出现链接器错误
- 是否可以知道是否包含标头