鱼C论坛

 找回密码
 立即注册
查看: 2262|回复: 4

函数调用问题!

[复制链接]
发表于 2011-12-9 00:49:10 | 显示全部楼层 |阅读模式

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

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

x
main()
{
        int i;
        long s=0;
        for(i=2;i<=3;i++)
                s=s+f1(i);
        printf("s=%ld\n",s);
}
long f1(int p)
{
    int k;
    long r;
    k=p*p;
    r=f2(k);
    return r;
}
long f2(int q)
{
    long c=1;
    int i;
    for(i=1;i<=q;i++)
      c=c*i;
    return c;
}为什么这个程序 main前面不定义long f1(int p);  long f2(int q); 也能运行呢?不是前面必须做声明 下面才能引用吗? 我有点搞混了?求大神详细讲一下函数调用之间的混淆地方和重要点!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-9 17:59:20 | 显示全部楼层
本帖最后由 仰望天上的光 于 2011-12-9 18:01 编辑

最好在前面声明下,否则编译器自动根据你的输入参数推断函数的类型,函数的返回值类型就推断为 int,有时候这样推断会带来错误的结果。如下面的程序

  1. main()
  2. {
  3. int i = f();
  4. }
  5. char* f()
  6. {
  7.     return "abc";
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-9 19:05:11 | 显示全部楼层
没声明的话 我VC6.报错啊?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-9 20:39:54 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-9 21:11:12 | 显示全部楼层
本帖最后由 R0sЁ 于 2011-12-9 21:12 编辑

             对于编译器而言,函数声明可以通过多种方式产生:通过函数调用函数定义以及显示的函数声明函数原型。如果一个函数调用(例如f(x))再出现之时尚未看到它的任何声明、定义和原型,那么编译器就会假定它具有下面这种默认的函数声明:

      int f();

      它不对这个函数的参数列表作任何假设。

      良好的编程风格是在使用函数之前提供它的函数定义或函数声明。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-9 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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