这个问题已经在这里有一个答案:
- 为什么是不是合法的转换“指针指向非const”的“指针指向const的” 5个回答
我有一个大的代码库,最近从微软的编译器的英特尔C ++编译移动。 我们团队的目标是没有主线警告编译。 由于开关,警告167的一个实例已经困惑了我。 如果我编译下面的代码:
int foo(const int pp_stuff[2][2])
{
return 0;
}
int foo2(const int pp_stuff[][2])
{
return 0;
}
int main(void)
{
int stuff[2][2] = {{1,2},{3,4}};
foo(stuff);
foo2(stuff);
return 0;
}
国际刑事法院会给我警告:
1>main.c(17): warning #167: argument of type "int (*)[2]" is incompatible with parameter of type "const int (*)[2]"
1> foo(stuff);
1> ^
1>
1>main.c(18): warning #167: argument of type "int (*)[2]" is incompatible with parameter of type "const int (*)[2]"
1> foo2(stuff);
为什么这应该是一个警告? 通常的作法是通过一个非const变量作为常量参数和类型和尺寸是相同的。
对于那些谁标志着这个重复的问题,我劝你三思。 如果别人遇到这样的警告,他们必须知道,在C参数在原型功能转换仿佛被赋值,然后搜索一个问题,是关于严格分配。 尽管答案最终被从C90 / C99相同的条款,问题是,我认为,有很大不同。