内容简介:翻译自:https://stackoverflow.com/questions/10726052/why-compiler-skips-assigning-variable
我有以下程序:
procedure GetDegree(const num : DWORD ; var degree : DWORD ; min ,sec : Extended); begin degree := num div (500*60*60); min := num div (500*60) - degree *60; sec := num/500 - min *60 - degree *60*60; end;
在指定了度变量后,调试器会跳到过程的结尾.这是为什么?
这是一个优化.变量min和sec按值传递.这意味着调用者看不到对它们的修改,并且对此过程是私有的.因此,编译器可以确定分配给它们是没有意义的.永远无法读取分配给变量的值.因此编译器选择节省时间并跳过分配.
我希望你的意思是声明这样的程序:
procedure GetDegree(const num: DWORD; var degree: DWORD; var min, sec: Extended);
正如我在上一个问题中所说,使用Extended并没有多大意义.使用其中一种标准浮点类型(单或双)会更好.甚至使用映射到Double的通用Real.
此外,您已声明min为浮点类型,但计算计算整数.在这方面,我对你上一个问题的回答非常准确.
我建议你创建一个记录来保存这些值.传递三个独立的变量会使您的函数接口非常混乱并破坏封装.这三个值只有在考虑整体时才有意义.
type TGlobalCoordinate = record Degrees: Integer; Minutes: Integer; Seconds: Real; end; function LongLatToGlobalCoordinate(const LongLat: DWORD): TGlobalCoordinate; begin Result.Degrees := LongLat div (500*60*60); Result.Minutes := LongLat div (500*60) - Result.Degrees*60; Result.Seconds := LongLat/500 - Result.Minutes*60 - Result.Degrees*60*60; end; function GlobalCoordinateToLongLat(const Coord: TGlobalCoordinate): DWORD; begin Result := Round(500*(Coord.Seconds + Coord.Minutes*60 + Coord.Degrees*60*60)); end;
翻译自:https://stackoverflow.com/questions/10726052/why-compiler-skips-assigning-variable
以上所述就是小编给大家介绍的《delphi – 为什么编译器会跳过赋值变量》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- C赋值运算符 – 编译器生成还是自定义?
- 少说话多写代码之Python学习023——赋值语句的用户02(链式赋值、增量赋值)
- 理解Golang多重赋值
- ES6 解构赋值
- 【ES6复习】解构赋值
- 问题分享:Js引用类型赋值
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
指数型组织
萨利姆•伊斯梅尔 (Salim Ismail)、迈克尔•马隆 (Michael S. Malone)、尤里•范吉斯特 (Yuri van Geest) / 苏健 / 浙江人民出版社 / 2015-8-1 / CNY 69.90
《指数型组织》是一本指数级时代企业行动手册。作者奇点大学创始执行理事萨利姆·伊斯梅尔归纳了指数型组织的11个强大属性,并提出了建立指数型组织的12个关键步骤。通过自己创建的一套“指数商”测试题,伊斯梅尔还测量出了指数型组织世界100强。 为什么小米、海尔和阿里巴巴能进入“指数型组织世界100强”名单?“独角兽”Uber、Airbnb、谷歌等知名企业是如何指数化自己的组织的? 未......一起来看看 《指数型组织》 这本书的介绍吧!