根据 ISO C 标准 (6.3.16.1),如果“两个操作数都是指向兼容类型的合格或非合格版本的指针,并且左边指向的类型具有所有右边指向的类型的限定符”。 我在我的静态分析工具中收到了警告,但我不确定是否存在真正的问题。因为正如您在下面的代码中看到的那样,该指针将传递给其原型(prototype)中具有“const”限定符的函数
int main()
{
static volatile const signed int batu[5] = {1,2,3,4,5};
unsigned int x = 5;
func(x, (signed int *) batu);
}
signed int func(unsigned int p1, volatile const signed int *p2)
{
return 0;
}
最佳答案
您只需要删除函数调用中的 (signed int *)
强制转换。变量 batu
和函数预期的参数 p2
属于同一类型(见下文),包括限定符,因此您根本不需要强制转换。
数组类型总是自动转换为其等效的指针类型,除非它是 sizeof
或一元 &
运算符的输入。来自 C 标准 6.3.2.1/3。
关于c - 危险的指针转换导致失去 const 资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36892583/