Что вызывает эту ошибку компилятора в небольшой модульной программе на C? - PullRequest
0 голосов
/ 16 апреля 2011

Я написал следующую простую программу на C:

#include <stdio.h>

int num1, num2;
int sum(int, int);

int main(void);
{
    printf("Enter two numbers:");
    scanf("%d %d", &num1, &num2);
    sum(num1, num2);
    return 0;
}

int sum(int a, int b)
{ 
    int res;
    res = a + b;
    return res;
}

Но она выдает следующую ошибку компилятора:

prog.c: 5: ошибка: ожидаемый идентификатор или '('before' {'token

Что может быть причиной этой ошибки и как ее исправить?

Ответы [ 4 ]

10 голосов
/ 16 апреля 2011

Точка с запятой после объявления функции main:

int main(void);

интерпретируется компилятором как обозначение конца этой функции.Поскольку точка с запятой есть, она не знает, что делать с блоком кода, который следует за объявлением этой функции.Вот что говорит вам ошибка компиляции:

prog.c: 5: ошибка: ожидаемый идентификатор или '(' перед '{' токеном

Это не такзнать, что делать с {, который идет после токена точки с запятой, который указывает на конец оператора.

Удаление точки с запятой - это простое решение, переписайте свою основную функцию следующим образом:

int main(void)
{
    printf("Enter two numbers:");
    scanf("%d %d",&num1,&num2);
    sum(num1,num2);
    return 0;
}

Что касается проблемы, поднятой в комментариях:

видите, когда я запускаю вывод, он запрашивает ввод двух чисел и не показывает никакого результата суммы ??

Ах, это совершенно другая проблема. Код синтаксически правильный, поэтому вы больше не получаете ошибок компилятора, но есть ошибка логика ! Вы никогда не говорили компьютеру print сумма этих двух чисел на экране. Вам нужно вставить еще один оператор printf, такой же, как первый, который у вас есть. Но на этот раз вы хотите напечатать значение, возвращаемое sum функция.

ThОкончательный код может выглядеть примерно так:

int main(void)
{
    printf("Enter two numbers:");
    scanf("%d %d",&num1,&num2);
    printf("%d\n", sum(num1, num2));
    return 0;
}
0 голосов
/ 16 апреля 2011

После прототипа main стоит точка с запятой:

int main(void);

Поэтому в вашей программе нет определения main:

int main(void) { /*  */ }

Компиляторожидая либо имя функции, либо имя структуры перед '{'.

0 голосов
/ 16 апреля 2011

Попробуйте заменить int main(void); на int main(void) (без ";")

0 голосов
/ 16 апреля 2011

int main(void); удалить ; из этой строки.

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