2

所以我刚刚开始学习 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

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

4

3 回答 3

3

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

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

正如 Werner Henze 所说:“看起来 Small Device C 编译器是为小型嵌入式设备设计的,并且不带有 scanf 功能。”。

于 2015-06-11T13:25:55.443 回答
2

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

Warning 112: Function 'scanf' implicit declaration

这意味着原型在其正常位置scanf不可用: . 由于编译器找不到原型,它使用默认参数创建一个原型并发出警告。尽管这是一个警告而不是错误,但在链接时这仍然可能最终失败。stdio.h

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

于 2015-06-11T13:32:41.900 回答
0

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

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

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

于 2015-10-18T12:07:15.793 回答