使size_t和wchar_t可移植?

Tyl*_*ler 6 c c++ size-t

据我所知,size_t和wchar_t的表示完全是特定于平台/编译器的.例如,我已经读过Linux上的wchar_t现在通常是32位,但在Windows上它是16位.有没有什么方法可以在我自己的代码中将这些标准化为一组大小(int,long等),同时仍然保持与两个平台上现有标准C库和函数的向后可比性?

我的目标基本上是做类似的设置,因此它们是一组尺寸.这可能不会破坏某些东西吗?我应该这样做吗?有没有更好的办法?

更新:我想这样做的原因是我的字符串编码在Windows和Linux上都是一致的

谢谢!

GMa*_*ckG 6

听起来你正在寻找C99和C++ 0x的<stdint.h>/ <cstdint>标题.这定义了类似uint8_t和的类型int64_t.

cstdint.hpp如果您没有这些标题,可以使用Boost .


Mat*_*hen 5

您不想重新定义这些类型.相反,您可以使用类型int32_t或类型int16_t(有符号32位和16位)的typedef ,它们是<stdint.h>C标准库的一部分.

如果您正在使用C++,则C++ 0x将添加,char16_t并且char32_t这些是针对UTF-16和UTF-32的新类型(不仅仅是用于整数类型的typedef).

因为wchar_t,另一种方法是使用像ICU这样的库,它以独立于平台的方式实现Unicode.然后,你可以使用UChar类型,它始终是UTF-16; 你仍然需要注意字节序.ICU还提供往返于UChar(UTF-16)的转换器.