Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在声明和定义之前,可以调用具有int或void返回类型的函数吗?_C_Ansi - Fatal编程技术网

C 在声明和定义之前,可以调用具有int或void返回类型的函数吗?

C 在声明和定义之前,可以调用具有int或void返回类型的函数吗?,c,ansi,C,Ansi,我在“Kernighan和Ritchie编写的C编程语言ANSI版本”中读到,如果在实际声明/定义一个函数之前,在另一个函数中调用一个返回类型为int或void的函数,那么它应该工作得很好。但当我在代码块上运行它时,仍然会收到警告 #include<stdio.h> #include<conio.h> int main() { display(); } void display() { printf("Hello World\n"); } #包括 #包括

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

#include<stdio.h>
#include<conio.h>
int main()
{
    display();
}
void display()
{
    printf("Hello World\n");
}
#包括
#包括
int main()
{
显示();
}
无效显示()
{
printf(“Hello World\n”);
}
警告为:“显示类型冲突”

但如果我将程序更改为:

#include<stdio.h>
#include<conio.h>
void display()
{
    printf("Hello World\n");
}
int main()
{
    display();
}
#包括
#包括
无效显示()
{
printf(“Hello World\n”);
}
int main()
{
显示();
}

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

在声明之前,您正在调用
display
。执行此操作时,编译器会对返回值的类型进行假设。它假定它是
int
。但定义函数时,使用类型为
void
的返回值,这是冲突


很长一段时间以来,没有人认为调用未声明的函数是合理的。因此,在调用之前声明所有函数。最好配置编译器,使其拒绝调用未声明函数的尝试。

如果在编译器未看到其原型时调用该函数,则假定返回类型为
int

但是,此功能(称为隐式函数声明)从C99起被删除,您永远不应该依赖它

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

void display(void);
int main(void)
{
    display();
}
void display(void)
{
    printf("Hello World\n");
}

默认情况下,仅假定返回类型为
int
,而不是
void
。您必须参考较新的标准。

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

void display();

int main()
{
    display();
}

void display()
{
    printf("Hello World\n");
}

您正在声明函数之前调用它。如果你在某个地方读过这本书,就会提到函数原型减速

#include<stdio.h>
#include<conio.h>
void display(void);  // function prototype decleration
int main()
{
    display();
}
void display()
{
    printf("Hello World\n");
}
#包括
#包括
无效显示(无效);//功能原型去宽容
int main()
{
显示();
}
无效显示()
{
printf(“Hello World\n”);
}

希望这有助于定义原型。

您也可以闭上眼睛穿过主要道路,但这并不是一个好主意。感谢您向我介绍这个概念。