我正在学习C并且想知道是否可以用函数声明替换函数调用..如下面的程序
main() {
void show();
getch();
}
void show() {
clrscr();
printf("Tendulkar is best batsman ever");
}
这里在main am声明show函数,并没有在任何地方调用它,但仍然
printf("Tendulkar is best batsman ever");
正在执行。为什么会这样?
当我在turbo c ++上运行程序时,还有一件事让我错误,但是在gcc上工作正常
main()
{
show();
}
void show()
{
printf("Tendulkar is best batsman ever");
}
预期
答案:
编译器错误:显示重新声明时键入不匹配。
说明:
当编译器看到函数show时,它对它一无所知。因此假设默认返回类型(即int)。但是当编译器看到显示不匹配的实际定义时,因为它被声明为void。因此错误。
答案 0 :(得分:3)
您展示的程序无法编译。我和我的编译器都不知道clrscr()
是什么,如果我没记错,getch()
是conio.h
中定义的旧MS-DOS函数,它没有包含在C编译器中至少20年。如果您正在尝试从书中学习C,请将其丢弃并获得一本新书。您会找到建议的图书清单here。
即使已经解决了所有未定义的函数,我们也会得到以下程序的小宝石:
int main()
{
void show();
return 0;
}
void show()
{
printf("Tendulkar is best batsman ever");
}
编译得很好,但什么都不做。 See for yourself。该程序不输出任何内容。
你应该在使用它们之前定义函数,调用函数与定义它不是一回事。你不能混淆两者,如果你这样做,你的程序保留不按预期工作的权利。你可以在C中的方法中定义一个函数(虽然它被认为是非常差的样式),但是这不会调用该方法。函数调用不包括返回类型。再一次,任何关于C编程的好书都会比Stack Overflow上的一些答案更好地告诉你。
只是为了比较,正确编写的样本看起来像这样:
#include <stdio.h>
void show(); // forward declaration of the show function
int main()
{
show(); // call the show function
return 0;
}
void show() // definition of the show function
{
printf("Tendulkar is best batsman ever");
}
答案 1 :(得分:1)
您需要将函数声明放在main方法之外。
void show(void);
main()
{
getch();
}
void show()
{
clrscr();
printf("Tendulkar is best batsman ever");
}
答案 2 :(得分:1)
你在另一个函数的定义中声明了一个函数,它是有效的C但非常差的样式。
除非你调用它,否则不会执行show()。发布的代码不会执行show()。答案 3 :(得分:1)
你确定你真的成功编译了你的代码吗?
您声明了一个函数void show(void)
,但您定义了void show(int)
。
即使编译,此代码也应使用getch
并退出。
我怀疑您正在运行不同的程序,可能是您之前成功编译的输出。
答案 4 :(得分:0)
必须先声明C中的函数才能执行。执行它并声明它是两个不可替代的东西。 Printf是一个已经为您声明的内部c标准库函数。但是对于你自己的函数,你必须在执行之前声明所有内容。
答案 5 :(得分:0)
您没有在C中的其他函数中声明函数。这就是您要执行的操作,但编译器会将您的void show();
视为对show()的调用。将你的声明移到main()之外,它会表现得像你期望的那样。