"Uint32","int16"之类; 他们是标准的c ++吗?

Zoo*_*tor 29 c++

我对c ++很陌生,但我已经掌握了基础知识.我在阅读其他代码时遇到了"Uint32"(各种大写)和类似数据类型的使用,但我找不到任何提及它们的文档.我知道"Uint32"是一个32位无符号整数,但我的编译器没有.我正在使用visual c ++ express,它无法从我所知道的任何形式识别它.

是否有一些编译器默认读取这些数据类型,或者让这些程序员将它们自己声明为类或#define常量?

我可以看到使用它们来准确知道整数的长度,因为正常的声明似乎因系统而异.使用它们还有其他优点或缺点吗?

pax*_*977 19

Unix平台在stdint.h中定义了这些类型,这是在编写可移植代码时确保类型大小调整的首选方法.

微软的平台没有定义这个标题,这在跨平台时是一个问题.如果您还没有使用Boost Integer Library,我建议让Paul Hsieh 使用此标头的便携式stdint.h实现,以便在Microsoft平台上使用.

更新: Visual Studio 2010及更高版本确实定义此标头.


Gre*_*ers 13

C99头文件stdint.h定义了这种形式的typedef uint32_t.据我所知,标准C++不提供命名空间std中的符号的cstdint版本,但是一些编译器可能,并且您通常能够包含来自C++代码的C99头.下一版本的C++将提供cstdint标头.

你会经常看到谁使用非标准形式这一主题的,比如别人的代码Uint32_tUint32uint32等,他们通常只是提供了一个头,该项目内定义了这些类型.可能这段代码最初是在很久以前开发的,当C99编译器变得普遍时,他们从不打扰sed取代定义.


Dan*_*eer 12

Visual c ++不支持固定宽度的整数类型,因为它不包括对C99的支持.有关使用它们的各种选项,请查看我对此主题的问题的答案.

  • 非常好.我认为我将使用boost库,因为它是跨平台的.该死的微软和他们自己动手的原则. (3认同)
  • 微软在这里并不是真正的责任:它们严格遵守标准:C++还没有任何标准化的固定大小数字类型. (3认同)
  • 好吧,我确实责怪微软不支持C99.那里有我想要的东西.其中大部分已经以Microsoft专有的方式实现,但其中一些并非如此,并且无论如何所有`#ifdef`语句都使我的代码大于必要. (2认同)