我正在处理的库需要在32位和64位机器上使用;我有很多编译器警告,因为在64位机器上unsigned int!= size_t.
用’unsigned long’替换所有无符号整数和size_ts有什么缺点吗?我很欣赏它看起来不是很优雅,但是,在外壳的情况下,内存不是太大的问题…我想知道是否有可能出现任何错误/不需要的行为等由此类替换所有操作(你能举例)?谢谢.
解决方法
什么警告?我能想到的最明显的一个是“缩小转换”,也就是说你将size_t分配给unsigned int,并获得信息可能会丢失的警告.
用unsigned long替换size_t的主要缺点是unsigned long不能保证足够大以包含size_t的每个可能值,而在Windows 64上它不够大.所以你可能会发现你仍然有警告.
正确的解决方法是,如果将size_t分配给变量(或数据成员),则应确保该变量的类型足以包含任何size_t值.这就是警告的全部内容.所以你不应该切换到unsigned long,你应该将这些变量切换到size_t.
相反,如果你有一个变量不需要大到足以保持任何大小,只要大到unsigned int,那么首先不要使用size_t.
两种类型(size_t和unsigned int)都有有效用途,所以任何方法都不加区分地取代所有其他类型的用法必须是错误的:-)实际上,你可以用size_t或uintmax_t替换所有东西,对于大多数程序都可以. .例外情况是代码依赖于使用与int相同大小的无符号类型,或者其他类型,这样较大的类型会破坏代码.