【发布时间】:2014-01-16 16:54:28
【问题描述】:
我正在尝试使用以下枚举值构建我的代码:
typedef enum {
YUV_420P=0,
YUV_422P,
RGB_P,
BAYER_P,
YUV_422IBE,
YUV_444IBE,
A_1BIT,
YUV_420SP,
COMPLEX_8BIT,
COMPLEX_16BIT,
COMPLEX_32BIT,
COMPLEX_U8BIT,
COMPLEX_U16BIT,
COMPLEX_U32BIT,
ALPHA_TYPE=0x8000
} Format;
但在构建过程中,我收到以下棉绒警告..
sample.h: Note 960: Violates MISRA 2004 Required Rule 9.3, '=' should initialize either all enum members or only the first; enumerator: 'ALPHA_TYPE' ..
我不想改变 ALPHA_TYPE 的值,我只想把 ALPHA_TYPE 放在这个枚举中。我该如何解决这个问题?
【问题讨论】:
-
您需要符合 MISRA 编码标准吗?如果没有,你可以忽略这个。
-
您并没有调用可怕的未定义行为,并且通常指定第一个元素的整数值,并理解其余元素将依次跟随。除非警告符合您的要求,否则请忽略它。
-
即使对于激进的静态分析来说,这也是一个相当奇怪的要求。也许 MISRA 不了解枚举器是什么。
-
@Lightness MISRA 以安全的名义强加了很多无意义的规则;必须写
if(var != 0) {}而不是if(var) {}除非var是_Bool,这是我想到的。 Ashwin:与 MISRA 警告相比,该代码存在更大的问题,1BIT不是有效标识符。