Передача массива в keil c выдает предупреждения C182, c235 (указатель на разные объекты, параметр 2 разных типов) - PullRequest
0 голосов
/ 20 января 2011
int main ()
{
    int arr[2][3];
    foo (arr);
    return 0;
}

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

Привет,

В Keil приведенный выше код выдает предупреждение C182 для вызова foo и предупреждение c235 в определении foo.Но, похоже, отлично работает в VC ++.Есть идеи почему и как решить?

Спасибо!

1 Ответ

1 голос
/ 20 января 2011

Предоставьте прототип для функции, чтобы компилятор знал, что происходит, когда выполняется вызов:

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

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

    foo (arr); 

    return 0; 
}

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

Без прототипа компилятор должен делать предположения о переданных параметрах и о том, что возвращает функция. Компилятор может выдавать или не выдавать предупреждения об этом в зависимости от версии компилятора и настроек компилятора.

...