为什么 GCC/clang 在编译 C++98 时抱怨包含
cstdint
而不是 stdint.h
?
使用
-std=c++98 -x c++ -Wall -Wextra -pedantic
输出编译 #include <cstdint>
:
此文件需要编译器和库支持 ISO C++ 2011 标准。
根据 C++98 标准,没有定义任何头文件。
#include
指令由 C 和 C++ 源代码的 GNU C 预处理器 (CPP) 执行。 CPP 默认搜索的头文件的标准系统目录包含 C 标准库的头文件。对于 C++,首先使用附加目录进行搜索。因此,即使对于 C++ 源代码,C 标准库头文件也默认可用。因此,找到的标头 stdint.h
不是自 C++11 以来可用的兼容性标头。而是从 C99 开始使用 C 标准库头文件。
我从旧版本的 GNU CPP 文档中推断出这一点:
GCC 在几个不同的位置查找标头。 [...] 对于 C++ 程序,它还会首先查找 [...]。另请参阅 GNU CPP 选项 和
-nostdinc++
。
⚠ 我认为这种行为不受 C++ 标准支持。