【问题标题】:Simple C programs returns too many parameters error简单的 C 程序返回太多参数错误
【发布时间】:2015-06-11 13:23:36
【问题描述】:

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

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

【问题讨论】:

  • 您使用的是哪个编译器? code seems fine.
  • 小型设备 C 编译器
  • 看来你的编译器是针对小型嵌入式设备的,没有scanf功能。
  • 是的,现在我研究它是有道理的。我刚拿了我推荐的第一个。
  • 这些错误是否带有行号?我知道为什么它可能会发出112 但101 很奇怪。

标签: c sdcc


【解决方案1】:

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

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

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

【讨论】:

  • 不是编译器的问题。 SDCC 编译器是为一堆嵌入式设备设计的,并且为标准输入实现 scanf 取决于硬件。 SDCC 开发人员希望保持其编译器硬件独立,因此不存在 scanf。
  • @ronaldo 输入与硬件相关,但输出与硬件无关?!
  • 是的,@Polluks。不同的硬件平台有不同的输出到屏幕的方式(如果他们甚至有屏幕的话)
  • @Polluks 对不起,没听懂。我没有想到你的问题是修辞性的。我不是母语人士:)
【解决方案2】:

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

Warning 112: Function 'scanf' implicit declaration

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

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

【讨论】:

  • OFF_TOPIC:您的最佳答案很好,我会将其链接到我的最佳问题。谢谢。
  • 你的意思是scanf?
【解决方案3】:

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

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

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

【讨论】:

  • 但是 printf 也依赖于平台!
  • 嗯,是的,也不是。 printf 本身通常与平台无关,但依赖于必须为您的平台实现的 putchar/putc。但是,在许多平台上实现 putchar/putc 通常是直截了当的。
  • getchar/getc 也一样。
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 2015-06-21
  • 1970-01-01
  • 2012-04-18
  • 2013-11-13
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多