我使用Coverity来静态分析我们的一些C++项目的源代码。我意识到这可能看起来像一个可笑的简单问题,但我想如果Coverity有这样的问题,我想知道这个错误被标记的根本原因。它一直在标记一个错误,我想知道这个错误是否真的改变了我的编码习惯,或者它真的是不必要的。Coverity静态分析说无符号的Int是Char(C++)
误差它标志的一个例子是:
unsigned int a;
a = 5;
Coverity的有一些问题与此并说:
“CID 101436(#1 1):隐式整数变换(MISRA_CAST) integer_signedness_changing_conversion:MISRA-2004规则10.1违规:隐式地改变表达式的签名。将具有基本类型char(8位,带符号)的5转换为具有不同符号类型的unsigned int(32位,无符号)。
不会有任何现代编译器知道在上面的例子中,5是一个unsigned int而不是char?这真的是一个有效的错误,它可以导致编译错误吗? 错误将尽快增加我走:
unsigned int a;
a = 5U;
是不是真的,如果我不每次无符号整型后指定“U”的问题吗?
不,这显然不是问题。你为什么跟着MISRA开始? –
错误是对是错。 “5”是一个整数,因为它是最小的整数字面量,这是错误的。虽然'5'可以用来初始化'char',因为它已知在'char'的有效范围内。 – NathanOliver
如果您希望有关签名类型的警告消失,请附加“U”或修改Coverity中的跳棋(禁用检查器)。 –