C++中的固定宽度整数

Dan*_*eer 19 c c++ portability types visual-c++

偶尔我需要使用固定宽度的整数与PLC等外部设备进行通信.我还使用它们来定义位掩码并执行图像数据的位操作.AFAIK C99标准定义了像int16_t这样的固定宽度整数.但是我使用的编译器,VC++ 2008不支持C99和AFAIK微软不打算支持它.

我的问题是在C++中使用固定宽度整数的最佳实践是什么?

我知道VC++定义了非标准的固定宽度整数,如__int16,但我对使用非标准类型犹豫不决.下一个C++标准是否会定义固定宽度的整数?

Meh*_*ari 18

您可以使用某些#ifdef指令解决问题.

#ifdef _MSC_VER
   typedef __int16 int16_t
#else
   #include <stdint.h>
#endif
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,未来的读者,MSVC 2010确实有`<cstdint>`! (3认同)

Hrv*_*eša 12

Boost具有适用于所有C99类型的typedef以及更多: "Boost integer library"

  • 针对实际读者的更新:C++11 现在具有固定大小类型:http://en.cppreference.com/w/cpp/types/integer (3认同)

Ada*_*eld 7

包含该文件<stdint.h>以获取类型的定义uint16_t.<stdint.h>默认情况下VC++不附带,但您可以从多个位置获取该文件. 维基百科列出了一些,谷歌会找到更多.

  • @David:这是一个很好的观点,但在这种情况下,维基百科页面上列出的stdint.h文件实际上是专门为MSVC++编写的. (3认同)