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 に答える