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

0 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;
}
Run Code Online (Sandbox Code Playgroud)

但它会产生以下编译器错误:

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

什么可能导致此错误,我该如何解决?

Cod*_*ray 10

声明main函数后的分号:

int main(void);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

至于评论中提出的问题:

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

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

最终代码可能如下所示:

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

  • @Demian:这是我发布答案的唯一原因,而不仅仅是简单地推销你的答案.你先把它弄好了,但你没有解释原因.修复肯定是有价值的,但解释是值得更多的! (3认同)