Ошибка: ожидается ")" перед ошибкой "char" в C - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в C и особенно указатели. Буду признателен за любую помощь.

int checkDiamonds(cor_row,cor_collumn,char *arr2)
{
    if (*(arr2 + cor_row*7 + cor_collumn)=='*')

        return 1;

    else
        return 0;
}

Это одна из функций, которые я использую для своего кода, и я не мог понять, почему он продолжает выдавать мне эту ошибку: Expected ')' before 'char'.

Ответы [ 3 ]

3 голосов
/ 22 апреля 2020

Объявление функции, которое одновременно является ее определением, может использовать либо список идентификаторов, либо список типов параметров, но не оба одновременно.

Так что это определение функции

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
2 голосов
/ 22 апреля 2020

Вы должны определить тип ваших параметров, например:

int checkDiamonds(int cor_row, int cor_collumn, char *arr2)
{
    // ...
}
1 голос
/ 23 апреля 2020

Современный способ определить вашу функцию - это ввести тип для каждого параметра:

int checkDiamonds(int cor_row, int cor_collumn, char *arr2)
{
    …
}

Для поддержки старого исходного кода функцию все же можно определить с помощью типов отдельно:

int checkDiamonds(cor_row, cor_collumn, arr2)
int cor_row;
int cor_collumn;
char *arr2;
{
    …
}

Поскольку компилятор видел int checkDiamonds(cor_row,cor_collumn, он ожидал, что следующим будет другое имя параметра или закрывающие скобки. Когда он увидел тип char, он был неожиданным, поэтому жаловался, сообщая вам, что ожидал ), а не char.

Существуют другие различия между двумя методами определения. Первый лучше различает типы и должен использоваться в новом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...