这是代码:
{{1}}
我收到了一条lint消息:
{{1}}
为什么呢?以及如何避免这种情况?
答案 0 :(得分:2)
您正在比较x
unsigned short
和1
,默认为int
。因此,您获得了隐式二进制转换。
为编译器提供一个提示,确实要将x
与另一个unsigned
值进行比较:
if ((x==1U) && y)
答案 1 :(得分:0)
试试这个
public void getJsonRequest(String url, final resultInterface listener){
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,url, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
listener.Success(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
listener.Error(error);
}
});}
答案 2 :(得分:0)
因为1被视为int。使用
unsigned int x
或演员
答案 3 :(得分:0)
目前尚不清楚您使用的是哪个版本的MISRA。在编写C ++代码时,您应该使用MISRA-C ++,其他一切都将违反MISRA规则。显然,使用MISRA-C检查程序无法检查是否符合MISRA-C ++。
无论如何,假设您的系统具有32位整数,无论MISRA版本如何,这都应该解决问题:
if ( ( static_cast<uint32_t>(x) == 1u ) && y) // compliant
要理解的重要部分是隐式促销如何运作以及如何避免它们:
将1
字面值转换为unsigned short
将无法解决任何问题。这样的强制转换是完全多余的,因为操作数无论如何都会立即将整数提升回int
。
if ( ( x == static_cast<unsigned short>(1) ) && y) // not compliant
unsigned short ushort=1u; if ( ( x == ushort ) && y) // not compliant
将1
字面值转换为unsigned int
或仅将其转换为1u
(同样的事情)将使程序按预期运行,但不会解决MISRA警告。因为您仍然有x
操作数的隐式类型提升,这是MISRA违规。
if ( ( x == 1u ) && y) // not compliant
if ( ( static_cast<unsigned int>(1) == x ) && y) // not compliant
研究整数提升和通常的算术转换。