C 复合表达式(目标的基本类型)堆栈溢出的不允许强制转换
伪码C 复合表达式(目标的基本类型)堆栈溢出的不允许强制转换,c,pointers,misra,C,Pointers,Misra,伪码 void a(Atype *b) { uint32 i = 0; uint32 b; b = (uint32)(&b[i]); } 对于代码-b=(uint32)(&b[i])中的行; 我收到的警告是 复合表达式的不允许浇铸(更广泛的基本要求) 目的地类型)[MISRA 2012规则10.8,必填] 我无法理解这个警告。有什么帮助吗?您正在隐藏作为参数传递的变量b,因此Atype不相关 然后您试图访问b[i],其中b是uint32。这没有意义:b不是指针或数组类型 您
void a(Atype *b)
{
uint32 i = 0;
uint32 b;
b = (uint32)(&b[i]);
}
对于代码-b=(uint32)(&b[i])中的行;
我收到的警告是复合表达式的不允许浇铸(更广泛的基本要求) 目的地类型)[MISRA 2012规则10.8,必填]
我无法理解这个警告。有什么帮助吗?您正在隐藏作为参数传递的变量
b
,因此Atype
不相关
然后您试图访问b[i]
,其中b
是uint32
。这没有意义:b
不是指针或数组类型
您的程序行为未定义。我对此感到惊讶。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的、可验证的示例?不要将指针投射到
(u)intptr\u t
“伪代码”不会生成警告。嗯,两者的作用域相同,因此它甚至不应该编译。