是什么原因导致小型模块化C程序中的编译错误?

时间:2011-04-16 06:08:38

标签: c compiler-errors

我写了以下简单的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:错误:预期的标识符或'(''''''之前的标记

可能导致此错误的原因,我该如何解决?

4 个答案:

答案 0 :(得分:10)

声明main函数后的分号:

int main(void);
编译器将

解释为标记该函数的结尾。因为分号在那里,所以它不知道如何处理该函数声明之后的代码块。这就是恭维错误告诉你的事情:

  

prog.c:5:错误:预期的标识符或'(''''''之前的标记

它不知道如何处理分号标记后面的{,它表示语句的结束。

删除分号是一个简单的解决方案;像这样重写你的主要功能:

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

至于评论中提出的问题:

  

看我何时运行输出它要求输入两个数字并且不显示任何总和结果?

啊,这是一个完全不同的问题。代码在语法上是正确的,因此您不会再遇到编译器错误,但它有一个逻辑错误!你从未告诉计算机打印这两个数字的总和到屏幕上。您需要插入另一个printf语句,就像您拥有的第一个语句一样。但这一次,您要打印sum函数返回的值。

最终代码可能如下所示:

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

答案 1 :(得分:0)

int main(void);从该行中删除;

答案 2 :(得分:0)

尝试将int main(void);替换为int main(void)(否“;”)

答案 3 :(得分:0)

main原型后面有分号:

int main(void);

因此,您的计划中没有main的定义:

int main(void) { /*  */ }

编译器在'{'。

之前需要函数名或结构名