#define无符号按位宏标志的良好做法

问题描述 投票:0回答:1

我知道必须只使用无符号整数进行按位运算,静态分析器就此警告我。

#define按位宏标志的好习惯是什么?到目前为止我看到了这两种方式:

#define MACRO_FLAG1 (1U << 0U)
#define MACRO_FLAG2 (unsigned int)(1 << 1)
c bit-manipulation
1个回答
2
投票

第一个宏用无符号整数表示移位,结果本身是无符号的。

第二个使用有符号整数进行移位,然后转换签名结果。它受到你提到的同样的弱点的影响。

值得注意的是,静态分析仪会警告您可能出现的问题。根据您的标志范围,即使使用有符号整数,也可能永远不会遇到所述问题。

© www.soinside.com 2019 - 2024. All rights reserved.