Когда использовать size_t против 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;
1 ответ
Согласно спецификации C
size_t ... - целочисленный тип без знака результата оператора sizeof
Таким образом, любая переменная, которая содержит результат sizeof
операция должна быть объявлена как size_t
, Так как length
параметр в образце прототипа может быть результатом sizeof
операция, уместно объявить его как size_t
,
например
unsigned char array[2000] = { 1, 2, 3 /* ... */ };
uint16_t result = [self calculateCRC16FromBytes:array length:sizeof(array)];
Вы можете утверждать, что рефакторинг параметра длины был бессмысленно педантичным, поскольку вы не увидите никакой разницы, если только:
а) size_t больше 32 бит
б) размер массива больше 4ГБ