鱼C论坛

 找回密码
 立即注册
查看: 1011|回复: 3

[已解决]关于函数定义和声明

[复制链接]
发表于 2023-7-2 15:01:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>           为啥一个函数声明在主函数里面,还能正常运行呢?不太理解,我以为函数声明只能是全局变量
int max(int x,int y)
{
        int z;
        if(x>y)
        {
                z=x;
        }
        else
        {
                z=y;
        }
        return (z);
}

int main()
{
        int max(int x,int y);
        int a,b,c;
        printf("请输入两个整数:");
        scanf("%d,%d",&a,&b);
        c=max(a,b);
        printf("最大的数字是:%d",c);
        return 0;
}

最佳答案
2023-7-2 15:02:59
你的问题是关于 C 语言中函数的声明和定义。让我们先澄清一些概念:

· 函数定义:函数定义是描述函数是如何工作的。在函数定义中,我们写出函数的实际内容,即函数的代码。在你的例子中, int max(int x, int y) {...}  就是一个函数定义。

· 函数声明:函数声明是告诉编译器有一个函数,它告诉编译器函数的名字、返回类型以及参数类型。这样,编译器就可以在函数被实际调用之前知道函数的存在。你在  main  函数中看到的  int max(int x, int y);  就是函数声明。

对于你的问题:为什么函数声明可以在主函数中,还能正常运行?

这是因为函数声明的位置并不重要。无论是在主函数中,还是在全局范围内,只要在你实际调用函数之前,编译器已经看到了函数的声明,那么程序就可以正常运行。

在你的示例中, int max(int x, int y);  这个声明在调用  max(a, b);  之前就出现在  main  函数内,所以编译器知道了  max  函数的存在,所以程序可以正常运行。

这种将函数声明放在函数内部的方式是合法的,但是在实践中,我们通常会把函数的声明放在所有函数的上面,也就是在全局范围内,这样可以提高代码的可读性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-2 15:02:59 | 显示全部楼层    本楼为最佳答案   
你的问题是关于 C 语言中函数的声明和定义。让我们先澄清一些概念:

· 函数定义:函数定义是描述函数是如何工作的。在函数定义中,我们写出函数的实际内容,即函数的代码。在你的例子中, int max(int x, int y) {...}  就是一个函数定义。

· 函数声明:函数声明是告诉编译器有一个函数,它告诉编译器函数的名字、返回类型以及参数类型。这样,编译器就可以在函数被实际调用之前知道函数的存在。你在  main  函数中看到的  int max(int x, int y);  就是函数声明。

对于你的问题:为什么函数声明可以在主函数中,还能正常运行?

这是因为函数声明的位置并不重要。无论是在主函数中,还是在全局范围内,只要在你实际调用函数之前,编译器已经看到了函数的声明,那么程序就可以正常运行。

在你的示例中, int max(int x, int y);  这个声明在调用  max(a, b);  之前就出现在  main  函数内,所以编译器知道了  max  函数的存在,所以程序可以正常运行。

这种将函数声明放在函数内部的方式是合法的,但是在实践中,我们通常会把函数的声明放在所有函数的上面,也就是在全局范围内,这样可以提高代码的可读性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 15:06:02 | 显示全部楼层
在C语言中,函数声明可以出现在主函数内部,这是因为C语言遵循了自顶向下的编译原则。在这种原则下,编译器需要提前知道所有函数的声明,以便正确解析和检查代码。

在主函数内部声明函数的作用是告知编译器该函数的存在,并提供函数的原型(参数类型和返回类型),以便编译器在遇到函数调用时能够正确处理。

在你给出的代码示例中,`int max(int x, int y);`是一个函数声明,在主函数之前通知编译器有一个名为`max`的函数,它接受两个整数参数并返回一个整数。

尽管函数声明放在主函数内部,但实际定义函数的代码是位于主函数之外的,即`int max(int x,int y)`的代码块。这样编译器在遇到函数调用`c=max(a,b);`时可以将其映射到正确的函数定义。

因此,在示例代码中,函数声明在主函数内部出现是合法的,并不会影响函数的正常运行。这种方式在一些简单的程序中可以使用,但在大型程序中,更好的做法是将函数声明放在全局范围或者单独的头文件中,以提高代码的可读性和维护性。

希望能解答您的疑问!如果还有其他问题,请随时提问。

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 15:21:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表