首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 ><cstdint> vs <stdint.h>

<cstdint> vs <stdint.h>
EN

Stack Overflow用户
提问于 2012-11-30 17:58:57
回答 3查看 58.7K关注 0票数 104

stdint.hcstdint之间的区别是什么

它们都在MSVC (Visual Studio2010)和gcc-4.5.1中可用。此外,两者都定义了intX_t/uintX_t类型(其中X是该类型的字节大小)。

  • 如果两个标头中的基本原理是相同的(可移植类型),我必须做出哪些决定才能选择其中一个?

stdint.h定义了没有任何名称空间的每种类型,cstdint类型位于std名称空间中。

  • 是否有理由在std命名空间中包含或不包含已定义的类型?这两个标头之间有什么不同?

cstdint没有文件扩展名并使用c前缀,stdint.h使用.h扩展名。

  • 此标头的命名约定是什么?c前缀表明这是一个C库?cstdint

中没有文件扩展名是有原因的

EN

Stack Overflow用户

发布于 2012-11-30 18:03:09

包含cstdint将符号名称导入到标准命名空间中,也可能导入到全局命名空间中。

包含stdint.h会导入全局名称空间中的符号名称,可能也会导入标准名称空间中的符号名称。

C++标准库中也提供了C标准库的功能,并且作为通用命名约定,它们在C标准库中的相应名称前面加上一个c。

在C++中,您应该使用:

代码语言:javascript
运行
复制
#include <cstdint>

并完全限定与std::一起使用的符号名称

在C中,你应该使用:

代码语言:javascript
运行
复制
#include <stdint.h>

声明:附录D(标准)兼容性特性描述:

D.6 C标准库头文件

1为了与C标准库和C Unicode TR兼容,C++标准库提供了25个C标头,如表151所示。

其中包括:

<assert.h> <float.h> <math.h> <stddef.h> <tgmath.h> <complex.h> <inttypes.h> <setjmp.h> <stdio.h> <time.h> <ctype.h> <iso646.h> <signal.h> <stdint.h> <uchar.h> <errno.h> <limits.h> <stdarg.h> <stdlib.h> <wchar.h> <fenv.h> <locale.h> <stdbool.h> <string.h> <wctype.h>

并且进一步,

2使用每个C标头,每个标头都有一个格式为using name.h**,的名称,就好像由相应的** cname header 放置在标准库命名空间中的每个名称都放在全局命名空间范围内一样。未指定这些名称是首先在命名空间标准的命名空间作用域(3.3.6)内声明还是定义,然后通过显式-声明(7.3.3)注入到全局命名空间作用域中。

3示例:头<cstdlib>肯定在名称空间std中提供了它的声明和定义。它还可以在全局名称空间内提供这些名称。头<stdlib.h>在全局名称空间中肯定提供了相同的声明和定义,与C标准中的声明和定义非常相似。它还可以在命名空间std中提供这些名称。-end示例

票数 16
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13642827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档