2

我在“Kernighan 和 Ritchie 的 C 编程语言 ANSI 版”中读到,如果我在实际声明/定义它之前在另一个函数中调用返回类型为 int 或 void 的函数,它应该可以正常工作。但是当我在代码块上运行它时,我仍然会收到警告。

#include<stdio.h>
#include<conio.h>
int main()
{
    display();
}
void display()
{
    printf("Hello World\n");
}

警告是:“显示冲突类型”。

但是,如果我将程序更改为:

#include<stdio.h>
#include<conio.h>
void display()
{
    printf("Hello World\n");
}
int main()
{
    display();
}

它可以在没有任何警告的情况下工作。这是为什么?请帮忙。

4

5 回答 5

6

display你在宣布之前打电话。当您这样做时,编译器会假设返回值的类型。它假定它是int。但是当您定义函数时,您使用的返回值类型void是冲突的。

很久没有人认为调用未声明的函数是合理的了。因此,在调用它们之前声明所有函数。最好配置您的编译器,使其拒绝调用尚未声明的函数的尝试。

于 2013-08-28T08:29:54.330 回答
3

您在声明它之前调用该函数。如果你在某处读过这本书,那里提到了函数原型减速。

#include<stdio.h>
#include<conio.h>
void display(void);  // function prototype decleration
int main()
{
    display();
}
void display()
{
    printf("Hello World\n");
}

希望这有助于始终定义原型。

于 2013-08-28T08:33:25.067 回答
1

如果在编译器没有看到它的原型时调用该函数,它假定返回类型是int.

然而,这个特性(称为隐式函数声明)从 C99 开始就被删除了,你永远不应该依赖它。

使用函数声明显然是更好的选择:

void display(void);
int main(void)
{
    display();
}
void display(void)
{
    printf("Hello World\n");
}
于 2013-08-28T08:31:34.923 回答
1

在主函数之前使用函数原型,如下所示:

void display();

int main()
{
    display();
}

void display()
{
    printf("Hello World\n");
}
于 2013-08-28T08:32:14.953 回答
0

默认情况下仅int假定返回类型 not void。您必须参考更新的标准。

于 2013-08-28T08:31:46.460 回答