gpt4 book ai didi

函数声明或函数原型(prototype)会影响程序的运行吗

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:04 25 4
gpt4 key购买 nike

我是编程界的新手,当我用 C 编写函数时,我开始知道函数中有三个最重要的部分,即 -

  1. 函数声明或函数原型(prototype)
  2. 函数调用
  3. 函数定义

但是,当我在解决一个数字的阶乘问题时,我在我的代码中了解到,当我在 main() 上面的代码中不包括函数声明或函数协议(protocol)时,代码仍然在运行并给出输出为 120。所以我的问题是为什么函数声明或函数原型(prototype)不影响我的程序的输出,或者是否没有必要在 main() 之上包含函数声明或原型(prototype)。

-------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);
}

最佳答案

如果您在未声明的情况下使用函数,编译器可能会提供默认声明。这不是现代 C 的一部分,但编译器可能使用旧标准或在这方面过于宽松。 (最好要求显式声明,因为它有助于减少错误。)

函数的任何声明都必须与函数的定义匹配。声明向编译器提供有关如何调用函数的信息。如果声明不匹配,事情就会出错。所以,是的,声明会影响你的程序;它可以打破它。

在这种情况下,您很幸运,函数的默认声明恰好与您的函数 fact 匹配。默认声明是一个返回 int 并接受您传递给它的任何参数的函数,受默认参数提升的影响。 (粗略地说,默认参数提升是将小于 int 的整数转换为 int,将 float 值转换为 double。因此,如果一个函数返回 int 并且只接受 intdouble 参数,它可以匹配默认声明。)

一个好的编译器会警告您缺少声明或声明错误。你的编译器有“开关”或其他选项来告诉它你想要什么样的警告和错误消息。你应该要求很多警告信息。

您的编译器可能也有开关说明要使用哪个版本的 C。 (有几个标准版本,最近是 1999 年和 2011 年,还有一些非标准变体。)您可能希望要求您的编译器使用 C 2011 标准,直到您有充分的理由更改它。 (不幸的是,如果您使用的是 Microsoft Visual C,我认为它不支持 C 2011。)

关于函数声明或函数原型(prototype)会影响程序的运行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com