我是编程领域的新手,当我在C语言中编写函数时,我开始知道函数中有三个最重要的部分,即 -
但是,当我解决一个关于一个数字的阶乘的问题时,我在我的代码中发现当我在main()上面的代码中没有包含函数声明或函数协议时,代码仍在运行并给出了输出为120.所以我的问题是为什么函数声明或函数原型不影响我的程序的输出,或者没有必要在main()上面包含函数声明或原型。
-------Code-----
#include<stdio.h>
#include<conio.h>
// int fact(int);
main()
{
int x;
x=fact(5);
printf("The factorial is =%d",x);
}
int fact(int n)
{
int f=1,i;
for(I=1;i<=n;i++)
f=f*I;
return (f);
}
答案 0 :(得分:4)
如果使用函数而不声明它,编译器可能会提供默认声明。这不是现代C的一部分,但编译器可能会使用旧标准或在这方面过于宽松。 (最好要求显式声明,因为它有助于减少错误。)
函数的任何声明都必须与函数的定义匹配。声明为编译器提供有关如何调用该函数的信息。如果声明不匹配,事情可能会出错。所以,是的,声明会影响你的程序;它可以打破它。
在这种情况下,幸运的是,函数的默认声明恰好与您的函数fact
匹配。默认声明是一个函数,它返回int
并接受您传递的任何参数,受默认参数提升的限制。 (粗略地说,默认参数促销是比int
更窄的整数转换为int
,float
值转换为double
。因此,如果函数返回int
并且只接受int
和double
个参数,它可以匹配默认声明。)
一个好的编译器会警告你缺少声明或声明是错误的。您的编译器具有“开关”或其他选项,告诉它您需要什么类型的警告和错误消息。你应该要求许多警告信息。
您的编译器可能还有开关,说明要使用哪个版本的C. (已有多个标准版本,最近一次是1999年和2011年,并且有一些非标准版本。)您可能希望请求您的编译器使用C 2011标准,直到您有充分的理由进行更改。 (不幸的是,如果您使用的是Microsoft Visual C,我认为它不支持C 2011。)