C中的函数声明

时间:2011-03-03 07:41:17

标签: c

我正在学习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。因此错误。

6 个答案:

答案 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()之外,它会表现得像你期望的那样。