免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jsrdcy
打印 上一主题 下一主题

[函数] 关于函数返回double类型的疑问!! [复制链接]

论坛徽章:
0
31 [报告]
发表于 2007-04-30 22:43 |只看该作者
原帖由 antigloss 于 2007-4-29 20:08 发表

不可能吧。怎么感觉出来的?

原帖由 antigloss 于 2007-4-29 20:11 发表
请说说在什么情况下会出现你所说得不能赋值的现象?


还是让楼主先回答引用的这两个问题吧。

.

论坛徽章:
0
32 [报告]
发表于 2007-05-01 16:40 |只看该作者
可能跟楼主的编译器有关系,我用gcc测试过,没有出现你所描述的问题.一切正常.

论坛徽章:
0
33 [报告]
发表于 2007-05-01 19:39 |只看该作者
原帖由 weckay 于 2007-5-1 16:40 发表
可能跟楼主的编译器有关系,我用gcc测试过,没有出现你所描述的问题.一切正常.


再差的编译器也不可能这么差吧

论坛徽章:
0
34 [报告]
发表于 2007-05-01 23:29 |只看该作者
建议楼主裁减程序,直接贴汇编代码(使用默认优化级别)
感觉两种写法在理论上不可能存在这样的差异@_@

PS:请顺带说明开发环境

[ 本帖最后由 silverwolf 于 2007-5-1 23:33 编辑 ]

论坛徽章:
0
35 [报告]
发表于 2007-05-04 19:48 |只看该作者
1、请记得包含输入输出的头文件。
2、如果函数定义放在调用之后,请先声明。
(这两点说的比较多余啊,^_^。但我自己确实吃过这样的亏,因为不定参数的函数,以及返回值非整型,不先申明的话,编译器有默认处理方式。)
3、像这样的问题,看一下汇编代码,应该很容易定位。

论坛徽章:
0
36 [报告]
发表于 2007-05-04 23:22 |只看该作者
我认为LZ想问的是:
很多C语言编译器都用寄存器返回函数的返回值,而当函数需要返回的数值类型超过寄存器能够表示的范围时,是不是尽量采用指针返回,而不是return返回。

如果我没理解错你的问题的话,我的回答是:
不论函数需要返回的数值类型是否超过寄存器能够表示的范围,都应该用指针传回结果,函数的返回值仅用来表示调用状态,例如求两个数的和:

  1. #define EOK 0
  2. #define EOVERFLOW 1

  3. /* 如果函数返回值为 EOK,*result的值为结果;
  4.     如果函数返回值为EOVERFLOW,*result的值与调用前一样,不做改变
  5. */
  6. int
  7. sum(int a, int b, int *result)
  8. {
  9.     if (溢出判断) {
  10.         return EOVERFLOW;
  11.     }
  12.     *result=a+b;
  13.     return EOK;
  14. }
复制代码


除非你的函数绝对不会出现任何异常(比如rand函数)可以直接返回结果。

论坛徽章:
0
37 [报告]
发表于 2007-05-06 15:41 |只看该作者
原帖由 langue 于 2007-4-29 20:55 发表


这是错误的用法。自动变量的值,在过程退出后,会变得不可知。

.

这个不对吧,这个是正常的用法呀,返回值放到寄存器里了,即使退栈也不会有问题.下面是有问题的代码
float* func(){
float pi=3.14;
return π
}

论坛徽章:
0
38 [报告]
发表于 2007-05-06 15:47 |只看该作者
原帖由 apollolegend 于 2007-5-6 15:41 发表

这个不对吧,这个是正常的用法呀,返回值放到寄存器里了,即使退栈也不会有问题.下面是有问题的代码
float* func(){
float pi=3.14;
return π
}

这里返回的是一个指针......其指向的地方在函数返回后是......

论坛徽章:
0
39 [报告]
发表于 2007-05-07 09:09 |只看该作者
感觉36楼的大侠说的很有道理哦!!我用的HP-unix,64位的,这里是不是超出寄存器表示范围了啊,能不能将寄存器表示范围扩大啊?

[ 本帖最后由 jsrdcy 于 2007-5-7 09:15 编辑 ]

论坛徽章:
0
40 [报告]
发表于 2007-05-07 09:17 |只看该作者
原帖由 silverwolf 于 2007-5-1 23:29 发表
建议楼主裁减程序,直接贴汇编代码(使用默认优化级别)
感觉两种写法在理论上不可能存在这样的差异@_@

PS:请顺带说明开发环境

这里怎么看直接得到汇编代码啊,HP-UNIX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP