据我所知,size_t和wchar_t的表示完全是特定于平台/编译器的.例如,我已经读过
Linux上的wchar_t现在通常是32位,但在Windows上它是16位.有没有什么方法可以在我自己的代码中将这些标准化为一组大小(int,long等),同时仍然保持与两个平台上现有标准C库和函数的向后可比性?
我的目标基本上是做类似的设置,因此它们是一组尺寸.这可能不会破坏某些东西吗?我应该这样做吗?有没有更好的办法?
更新:我想这样做的原因是我的字符串编码在Windows和Linux上都是一致的
谢谢!
解决方法
您不想重新定义这些类型.相反,您可以使用typedef,如int32_t或int16_t(带符号的32位和16位),它们是< 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)的converters.