何时使用 size_t 与 uint32_t?
When to use size_t vs uint32_t?
何时使用 size_t 与 uint32_t?我在项目中看到一个方法,它接收一个名为length(类型uint32_t)的参数来表示要处理的字节数据的长度,该方法用于计算接收到的字节数据的CRC。参数的类型后来被重构为size_t。在这种情况下使用 size_t 是否有技术优势?
例如
- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(uint32_t)length;
- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(size_t)length;
根据 C 规范
size_t ... is the unsigned integer type of the result of the sizeof
operator
因此,任何保存 sizeof
运算结果的变量都应声明为 size_t
。由于示例原型中的 length
参数可能是 sizeof
操作的结果,因此将其声明为 size_t
.
是合适的
例如
unsigned char array[2000] = { 1, 2, 3 /* ... */ };
uint16_t result = [self calculateCRC16FromBytes:array length:sizeof(array)];
您可能会争辩说长度参数的重构是毫无意义的迂腐,因为除非:
,否则您将看不出有什么区别:
a) size_t 大于 32 位
b) 数组大小大于 4GB
何时使用 size_t 与 uint32_t?我在项目中看到一个方法,它接收一个名为length(类型uint32_t)的参数来表示要处理的字节数据的长度,该方法用于计算接收到的字节数据的CRC。参数的类型后来被重构为size_t。在这种情况下使用 size_t 是否有技术优势?
例如
- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(uint32_t)length;
- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(size_t)length;
根据 C 规范
size_t ... is the unsigned integer type of the result of the sizeof operator
因此,任何保存 sizeof
运算结果的变量都应声明为 size_t
。由于示例原型中的 length
参数可能是 sizeof
操作的结果,因此将其声明为 size_t
.
例如
unsigned char array[2000] = { 1, 2, 3 /* ... */ };
uint16_t result = [self calculateCRC16FromBytes:array length:sizeof(array)];
您可能会争辩说长度参数的重构是毫无意义的迂腐,因为除非:
,否则您将看不出有什么区别:
a) size_t 大于 32 位
b) 数组大小大于 4GB