我在我的项目中切换到固定长度的整数类型主要是因为它们帮助我在使用它们时更清楚地考虑整数大小。包括它们 via#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
and1
应该是整数,应该由编译器自动转换为正确的类型。如果我在我的示例中使用它,代码会更容易阅读:
uint64_t i;
for (i = 0; i < 10; i++) { ... }
那么我什么时候应该使用固定长度的常量宏UINT32_C()
,什么时候应该把这项工作留给编译器(我使用的是 GCC)?如果我用 MISRA C 编写代码会怎样?