Когда использовать 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ГБ

Другие вопросы по тегам