何时使用size_t vs uint32_t?

时间:2015-02-23 22:00:47

标签: objective-c c size-t uint32

何时使用size_t vs uint32_t?我在项目中看到一个方法,它接收一个名为length(类型为uint32_t)的参数来表示要处理的字节数据的长度,该方法用于计算接收到的字节数据的CRC。该参数的类型后来被重构为size_t。在这种情况下使用size_t是否具有技术优势?

e.g。

- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(uint32_t)length;

- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(size_t)length;

1 个答案:

答案 0 :(得分:5)

根据C规范

  

size_t ...是sizeof结果的无符号整数类型   操作

因此,任何保存sizeof操作结果的变量都应声明为size_t。由于示例原型中的length参数可能是sizeof操作的结果,因此将其声明为size_t是合适的。

e.g。

unsigned char array[2000] = { 1, 2, 3 /* ... */ };
uint16_t result = [self calculateCRC16FromBytes:array length:sizeof(array)];

你可能会争辩说,长度参数的重构是毫无意义的迂腐,因为你看不出有任何区别,除非:
a)size_t超过32位
b)阵列的大小超过4GB