我正处于一个新项目框架的早期阶段。
我定义了一个返回类型为“bool”的函数
我从 PC-Lint 得到了这个输出
Including file sockets.h (hdr)
bool sock_close(uint8_t socket_id);
^
"LINT: sockets.h (52, 1) Note 970: Use of modifier or type '_Bool' outside of a typedef [MISRA 2012 Directive 4.6, advisory]"
我继续在另一个标题中定义它以关闭 lint:
typedef bool bool_t;
然后我开始想知道为什么我必须这样做以及为什么它改变了任何东西。我转向 MISRA 2012 Dir 4.6。它主要关注原始类型的宽度,如 short、int 和 long、它们的宽度以及它们是如何签名的。
该标准没有给出 bool 的任何放大、合理、例外或示例。
bool 在 C99 的 stdbool.h 中明确定义为 _Bool。那么这个标准真的适用于布尔吗?
根据 C99 的第 6.2.5 节,我认为 _Bool 始终是“足以存储值 0 和 1 的最小标准无符号整数类型”。所以我们知道 bool 是无符号的。那么 _Bool 不是固定宽度并且主题以某种方式被提升的事实是否只是问题所在?因为理性似乎与这个概念相矛盾。
遵守本指南并不能保证可移植性,因为 int 类型的大小可能决定表达式是否接受整数提升。
放置如何typedef bool bool_t;
改变任何东西 - 因为我没有做任何事情来表明这样做的宽度或签名?bool_t 的宽度也将取决于平台。有没有更好的方法来重新定义 bool?
除非实现的类型实际上具有该长度,否则不得以特定长度定义类型
所以typedef bool bool8_t;
应该是完全非法的。
Gimpel 对指令 4.6 的解释是错误的,还是他们发现了?