Я переключился на целочисленные типы фиксированной длины в своих проектах главным образом потому, что они помогают мне более четко представлять целочисленные размеры при их использовании. Включение их через #include <inttypes.h>
также включает в себя множество других макросов, таких как макросы печати PRIu32
, PRIu64
,...
Чтобы присвоить постоянное значение переменной фиксированной длины, я могу использовать такие макросы, как UINT32_C()
и INT32_C()
. Я начал использовать их всякий раз, когда присваивал постоянное значение.
Это приводит к коду, подобному этому:
uint64_t i;
for (i = UINT64_C(0); i < UINT64_C(10); i++) { ... }
Теперь я видел несколько примеров, которые не заботились об этом. Одним из них является включаемый файл stdbool.h
:
#define bool _Bool
#define false 0
#define true 1
bool
на моей машине имеет размер 1 байт, поэтому он не похож на int
. Но 0
и 1
должны быть целыми числами, которые должны автоматически преобразовываться компилятором в правильный тип. Если бы я использовал это в своем примере, код был бы намного легче читать:
uint64_t i;
for (i = 0; i < 10; i++) { ... }
Итак, когда я должен использовать макросы констант фиксированной длины, такие как UINT32_C()
, и когда я должен оставить эту работу компилятору (я использую GCC)? Что, если бы я написал код на MISRA C?
int
меньше 32 бит. - person nwellnhof   schedule 26.11.2016