Я переключился на целые типы фиксированной длины в своих проектах, главным образом потому, что они помогают мне более четко определять размер целых чисел при их использовании. Включение их через #include <inttypes.h>
также включает в себя кучу других макросов, таких как макросы печати PRIu32
, PRIu64
,...
Чтобы назначить постоянное значение переменной фиксированной длины, я могу использовать макросы типа UINT32_C()
и INT32_C()
. Я начал использовать их, когда я назначил постоянное значение.
Это приводит к похожему на код:
uint64_t i;
for (i = UINT64_C(0); i < UINT64_C(10); i++) { ... }
Теперь я увидел несколько примеров, которые не заботились об этом. Одним из них является файл stdbool.h
include:
#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?