A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 傘が咲く 高级黑马   /  2014-5-7 20:36  /  2530 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 傘が咲く 于 2014-5-8 00:00 编辑

写了一个车类,编译有警告,这是为啥!
Car2.m:27:1: warning: control may reach end of non-void function [-Wreturn-type]
}

  1. #import <Foundation/Foundation.h>

  2. //定义Car类
  3. @interface Car2 : NSObject
  4. {
  5.     @public
  6.     char *name;
  7.     int speed;
  8. }


  9. //用于与其他车对象比较速度
  10. - (int)compareSpeedWithOthers:(Car2 *)car;
  11. @end


  12. @implementation Car2

  13. - (int)compareSpeedWithOthers:(Car2 *)car
  14. {
  15.     if(speed > car->speed)
  16.         return 1;
  17.     if(speed == car->speed)
  18.         return 0;
  19.     if(speed < car->speed)
  20.         return -1;
  21. }
  22. @end

  23. int main()
  24. {
  25.     Car2 *c1 = [Car2 new];
  26.     Car2 *c2 = [Car2 new];
  27.     c1->name = "BMW";
  28.     c1->speed = 200;
  29.     c2->name = "TANK";
  30.     c2->speed = 300;
  31.     int result = [c1 compareSpeedWithOthers:c2];
  32.     NSLog(@"%d",result);
  33.     return 0;
  34. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
bao9107 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 godlike 于 2014-5-7 21:03 编辑

比较明显,这部分代码缺少返回值:
  1. - (int)compareSpeedWithOthers:(Car2 *)car
  2. {
  3.     if(speed > car->speed)
  4.         return 1;
  5.     if(speed == car->speed)
  6.         return 0;
  7.     if(speed < car->speed)
  8.         return -1;
  9.    
  10. }
复制代码

你这样写if语句,系统会认为,可能会缺少return,因为如果,每一个if语句都不满足,就没有返回值了,当然这是不可能的了,但是编译器会给你这个警告,只是个警告,能运行的;可在最后加个 return 0;反正也不会执行到;
其实楼主你的三句if可以只写一句:
  1. - (int)compareSpeedWithOthers:(Car2 *)car
  2. {
  3.     /*
  4.     if(speed > car->speed)
  5.         return 1;
  6.     if(speed == car->speed)
  7.         return 0;
  8.     if(speed < car->speed)
  9.         return -1;
  10.      */
  11.     if(speed < car->speed)
  12.         return -1;
  13.     return speed > car->speed; // 这个表达式如果>,结果为1,不大于也就是=了,结果为0;
  14.    
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
bao9107 + 1

查看全部评分

回复 使用道具 举报
control may reach end of non-void function   这个错误表示缺少返回语句
回复 使用道具 举报
godlike 发表于 2014-5-7 21:02
比较明显,这部分代码缺少返回值:

你这样写if语句,系统会认为,可能会缺少return,因为如果,每一个if语 ...

明白了,谢谢!
回复 使用道具 举报
浏览一下。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马