【发布时间】:2016-04-27 14:19:22
【问题描述】:
根据 ISO C 标准(6.3.16.1),一个指针只能分配给另一个指针,如果“两个操作数都是指向兼容类型的合格或非合格版本的指针,并且左边指向的类型具有所有右边指向的类型的限定符”。 我在静态分析工具中收到了该警告,但我不确定是否存在真正的问题。因为正如您在下面的代码中看到的那样,该指针将被传递给原型中具有“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;
}
【问题讨论】:
-
标准中没有
6.3.16,少了.1。您用作参考的不是 ISO9899。 -
如果 1) 它们不是绝对必需的或 2) 你不理解强制转换的所有 含义或 3) 你不完全接受它们,则不要使用强制转换。那么,为什么你使用那个演员表?
-
这是部分
6.5.16.1/1(C99) -
@atturri:C99 不是 C 标准!
-
@Olaf。我不介意它是否是 当前 标准。这是可以阅读问题中引用的标准。您不会在最新的 C 标准中找到该引用。
标签: c pointers casting constants