gpt4 book ai didi

c - C 中 2 的幂的 Misra 兼容宏

转载 作者:行者123 更新时间:2023-12-02 06:27:55 25 4
gpt4 key购买 nike

我有以下宏

#define POWER_OF_TW0(x) ( ((x) > 0)  && (!((x)&((x) - 1))))

为了让它符合 misra 标准,我尝试了

#define POWER_OF_TW0(x) ( ((x) > 0)  && (!((unsigned)(x)&((unsigned)(x) - 1u))))

但这仍然不符合misra,因为如果代码如下

uint8_t val = 4;
if(POWER_OF_TWO(val))
{
..
}

与有符号数 0 ((x) > 0) 相比,misra 工具会提示无符号数。

如果对 val 的声明被签名,那就太好了,例如int8_t.

我觉得唯一的出路是考虑这个宏将被赋予正数并将代码更改为 ((x) != 0u) 即;

#define POWER_OF_TW0(x) ( ((x) != 0u)  && (!((unsigned)(x)&((unsigned)(x) - 1u))))

如果有其他解决方案,请告诉我。

最佳答案

使用静态内联函数代替宏。 (无论如何,MISRA 建议不要使用“宏函数”,请参阅 this SO question,因此在任何情况下您都应该这样做。)一旦它是内联函数,您可以将 x 键入为无符号以避免大量转换,以及 > 0u 问题。

关于c - C 中 2 的幂的 Misra 兼容宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51143520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com