浮点函数返回值

时间:2012-12-21 11:02:14

标签: iphone objective-c ios c

我正在编写我的对象第一个应用程序,我无法理解为什么编译器会出错。 (使用int代码工作......)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {


        // 1st var
        NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f));

    }
    return 0;
}
float res (float a, float b, float c)
{
    float res=a+b+c;
    return res;
}

3 个答案:

答案 0 :(得分:4)

尝试在main之前声明res,以便编译器在main中找到它时知道它。如果你事先没有声明,那么会发生什么:

  1. 编译器首次在res正文中遇到main;

  2. 它构成res的“隐式声明”,基于它可以从res内部调用main的方式推断出来的内容;根据C惯例,这意味着int返回类型;

  3. 当稍后发现真实的res时,推断的签名(即返回类型)与真实签名之间的不匹配会触发编译错误。

  4. 修复它:

    float res (float a, float b, float c);
    
    int main(int argc, const char * argv[])
    {
      @autoreleasepool {
    
        // 1st var
        NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f));
      }
      return 0;
    }
    
    float res (float a, float b, float c)
    {
      float res=a+b+c;
      return res;
    }
    

答案 1 :(得分:1)

你只是忘记声明功能,只需输入

float res (float a, float b, float c);
int main

之前

希望它可以帮到你!

答案 2 :(得分:0)

尝试:

#import <Foundation/Foundation.h>

float res (float a, float b, float c)
{
    float res=a+b+c;
    return res;
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {


        // 1st var
        NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f));

    }
    return 0;
}