简单的 C 程序 returns 太多参数错误

Simple C programs returns too many parameters error

所以我刚刚开始学习 C,在使用 SmallDevice C 编译器设置 CodeBlocks 之后,我开始处理我正在学习的书中的一些程序。它不断返回此错误。这是代码:

#include <stdio.h>
int main()
{
    int num1, num2, sum;
    printf("Enter two integers: \n");
    scanf("%d %d",&num1,&num2);
    sum=num1+num2;
    printf("Sum: %d",sum);
    return(0);
}

它给我的错误是

Warning 112: Function 'scanf' implicit declaration
error 101: too many parameters

我去找了一篇完全相同的文字(它给了我完全相同的代码),当我把它放进去时仍然给我这个错误。这是我的编译器的问题吗?

是的,这是您的编译器问题 or/and 您的安装。代码没有语法错误。

gsamaras@pythagoras:~$ pico Justc25_main.c
gsamaras@pythagoras:~$ gcc Justc25_main.c
gsamaras@pythagoras:~$ 

正如 Werner Henze 所说:"It looks like Small Device C compiler is for small embedded devices and does not come with scanf function."。

不,这不是你编译器的问题。

Warning 112: Function 'scanf' implicit declaration

这意味着 scanf 的原型在其 正常 位置不可用:stdio.h。由于编译器找不到原型,它会创建一个带有默认参数的原型并发出警告。虽然这是一个警告而不是错误,但是当 linking.

时,这仍然可能最终失败

最有可能的原因是它的标准库没有包含scanf.

@jongware 说的对。 SDCC 没有 scanf 实现,这就是警告 112 和后续错误 101 的原因。您可以通过在 stdio.h header 和完整源代码中查找 scanf 来自行检查。

基本上,SDCC 开发人员希望他们的编译器独立于平台,并且为嵌入式设备实现 scanf 需要有关每个平台的硬件特定知识。例如,scanf 对 Amstrad CPC 的实现与对 MSX 的实现不同,即使两者具有相同的 Z80 处理器。

根据您的目标平台,您可能会发现可用的 scanf 实现。其他选择是为您的平台实现 getchar,然后使用 gets。