Объявление функции, которое одновременно является ее определением, может использовать либо список идентификаторов, либо список типов параметров, но не оба одновременно.
Так что это определение функции
int checkDiamonds(cor_row,cor_collumn,char *arr2)
{
if (*(arr2 + cor_row*7 + cor_collumn)=='*')
return 1;
else
return 0;
}
анализируется компилятором как функция, имеющая список идентификаторов, но затем обнаруживает спецификатор типа.
Поэтому вам необходимо использовать либо список идентификаторов, либо список типов параметров. Конечно, лучше использовать список типов параметров, предоставляющий прототип функции для компилятора.
Например, ваша функция может быть объявлена как
int checkDiamonds( size_t cor_row,size_t cor_collumn, const char *arr2)
{
return *( arr2 + cor_row*7 + cor_collumn ) == '*';
}
Вот демонстрационная программа, которая показывает Разница между использованием списка идентификаторов и списка типов параметров в объявлении функции, которое в то же время является определением функции.
#include <stdio.h>
void f( s, n )
const char *s; size_t n;
{
puts( s + n );
}
void g( const char *s, size_t n )
{
puts( s + n );
}
int main(void)
{
f( "One Two", 0 );
g( "One Two", 4 );
return 0;
}
Вывод программы:
One Two
Two