本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议2-4,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议2-4:禁止把size_t类型和它所代表的真实类型混用
我们知道,size_t类型代表的是一种无符号整数类型,现在有这样一个问题:既然size_t类型是一种无符号整数类型,那么它是否可以直接与它所代表的真实实际类型混合使用呢?带着这个问题,我们来看下面这段代码:
unsigned int x;
size_t y;
x = y;
在上面的代码中,变量x被声明为unsigned int类型(即无符号整数类型),变量y虽然被声明为size_t类型,但它同样是一种无符号整数类型。因此,从表面上看,语句“x = y”完全是可行的,但实际情况并非如此。
上面已经阐述过,size_t类型在不同的平台上很可能代表的是unsigned int、unsigned long int或者unsigned long long int类型。当代表unsigned int类型时,执行语句“x = y”不会出现什么问题;但如果代表的是unsigned long int或unsigned long long int类型,那么执行语句“x = y”时,就可能把y的高位给截掉,从而导致结果出错。因此,我们千万不能在程序中混用size_t类型和它所代表的真实类型,这一点一定要注意。