C++98 的 stdint (gcc/clang)

问题描述 投票:0回答:1

为什么 GCC/clang 在编译 C++98 时抱怨包含

cstdint
而不是
stdint.h

使用

-std=c++98 -x c++ -Wall -Wextra -pedantic
输出编译
#include <cstdint>

此文件需要编译器和库支持 ISO C++ 2011 标准。

根据 C++98 标准,没有定义任何头文件。

c++ c-preprocessor c++98
1个回答
0
投票

海湾合作委员会

#include
指令由 C C++ 源代码的 GNU C 预处理器 (CPP) 执行。 CPP 默认搜索的头文件的标准系统目录包含 C 标准库的头文件。对于 C++,首先使用附加目录进行搜索。因此,即使对于 C++ 源代码,C 标准库头文件也默认可用。因此,找到的标头
stdint.h
不是自 C++11 以来可用的兼容性标头。而是从 C99 开始使用 C 标准库头文件。

我从旧版本的 GNU CPP 文档中推断出这一点:

GCC 在几个不同的位置查找标头。 [...] 对于 C++ 程序,它还会首先查找 [...]。

另请参阅 GNU CPP 选项

-nostdinc

-nostdinc++

⚠ 我认为这种行为不受 C++ 标准支持。

© www.soinside.com 2019 - 2024. All rights reserved.