提问人:user5534993 提问时间:8/28/2023 更新时间:8/28/2023 访问量:106
用于 C++98 的 stdint (gcc/clang)
stdint for C++98 (gcc/clang)
问:
为什么 GCC/clang 抱怨在编译 C++98 时包含而不是包含?cstdint
stdint.h
使用以下输出进行编译:-std=c++98 -x c++ -Wall -Wextra -pedantic
#include <cstdint>
此文件需要编译器和库支持 ISO C++ 2011 标准。
根据 C++98 标准,没有定义任何标头。
答:
海湾合作委员会
该指令由 GNU C 预处理器 (CPP) 执行,用于 C 和 C++ 源代码。默认情况下,CPP 搜索头文件的标准系统目录包含 C 标准库的头文件。对于 C++,首先使用其他目录进行搜索。因此,即使对于 C++ 源代码,C 标准库标头在默认情况下也可用。因此,找到的标头不是自 C++11 以来可用的兼容性标头。但相反,自 C99 以来可用的 C 标准库标头。#include
stdint.h
我从旧版本的 GNU CPP 文档中推断出这一点:
GCC 在几个不同的位置查找标头。[...]对于 C++ 程序,它还将首先查看 [...]。
另请参阅 GNU CPP 选项 -nostdinc 和 -
nostdinc++
。
⚠ 我假设这种行为不受 C++ 标准的支持。
评论
stdint.h
-std
-pedantic-errors
C++ 标准仅记录属于 C++ 标准库的标头。自 C++11 以来,其中一个标头是 .如果在 C++03 或 C++98 模式下包含此标头,编译器将生成一条警告,指出此标头不是所选 C++ 标准版本的一部分。cstdint
标头是 C 标准库的一部分,不在 C++ 标准中(除了作为对 C 标准的引用)。此标头在许多其他标准中也有描述,例如 POSIX。C++编译器允许包含C标准库头文件以及系统头文件,这就是包含有效的原因,尽管该头文件定义的类型未放在.事实上,通常(但不一定)C++ 标准头文件是在内部使用 C 标准头文件实现的。然而,C++ 标准并不涵盖这些标头,事实上,这些标头并不依赖于您选择的 C++ 版本。因此,当您包含这些标头时,编译器不会抱怨,即使在较旧的 C++ 版本中也是如此。stdint.h
stdint.h
namespace std
评论
stdint.h
stdint.h
cstdint
上一个:在区域中查找子字符串
下一个:C++98 中的类型名和结构定义
评论
<cstdint>
std::
using
using