0
int main ()
{
    int arr[2][3];
    foo (arr);
    return 0;
}

void foo(int (*arr)[3])
{
    **arr = 0;
}

你好,

在 Keil 中,上面的代码对 foo 的调用给出了警告 C182,它在 foo 的定义中给出了警告 c235。但它似乎在 VC++ 中运行良好。任何想法为什么以及如何解决?

谢谢!

4

1 回答 1

1

为函数提供一个原型,以便编译器知道调用时发生了什么:

void foo(int (*arr)[3]);

int main () 
{
    int arr[2][3]; 

    foo (arr); 

    return 0; 
}

void foo(int (*arr)[3]) 
{ 
    **arr = 0;
}

如果没有原型,编译器必须对传递的参数和函数返回的内容做出假设。根据编译器的版本和编译器设置,编译器可能会也可能不会发出警告。

于 2011-01-20T02:18:41.933 回答