Delphi:如何使用 $OVERFLOWCHECKS OFF 禁用溢出检查?

2024-03-21

我有一些代码会导致下溢:

var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;

   delta := (t2 - t1);

减法本身does生成上溢(下溢),但我不希望 Delphi 抛出EIntOverflow例外。因此,我尝试通过禁用溢出检查来禁用溢出检查代码的生成:

var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;

{$OVERFLOWCHECKS OFF}
   delta := (t2 - t1);
{$OVERFLOWCHECKS ON}

然而即使与OVERFLOWCHECKS OFF选项,它仍然抛出异常。生成的代码仍然包含检查:

关于文档的提醒$Q:

溢出检查

Type Switch
Syntax{$Q+} 或 {$Q-}
{$OVERFLOWCHECKS 开启} 或 {$OVERFLOWCHECKS 关闭}
Default {$Q-}
{$OVERFLOW检查关闭}
Scope Local

Remarks

$Q 指令控制 生成溢出检查代码。 在{$Q+}状态下,某个整数 算术运算(+、-、*、Abs、 Sqr、Succ、Pred、Inc, and Dec) 是 检查是否溢出。代码为 这些整数算术中的每一个 操作之后是附加的 验证结果的代码 在支持的范围内。如果 溢出检查失败,EIntOverflow 引发异常(或者程序是 如果异常处理被终止 未启用)。

$Q 开关通常用于 与 $R 开关结合使用, 启用和禁用生成 范围检查代码。启用溢出 检查会减慢你的程序并且 让它变得更大一些,所以使用 {$Q+} 仅用于调试。

我该如何使用$OVERFLOWCHECKS OFF禁用溢出检查代码的生成?


梅森的回答奏效了。修改后的代码为:

var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;

   delta := Subtract(t2, t1);


{$OVERFLOWCHECKS OFF}
function Subtract(const B, A: DWORD): DWORD; //subtract B-A
begin
   {
      Disabling overflow checking does not work at the line level,
      only the routine level. 
      Hence the function to subtract two numbers.
   }
   Result := (B-A);
end;
{$OVERFLOWCHECKS ON}

对于谷歌爬虫,替代问题措辞:如何暂时禁用 Delphi 中的溢出检查?


它在线路级别不起作用。您需要将其关闭才能完成整个功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi:如何使用 $OVERFLOWCHECKS OFF 禁用溢出检查? 的相关文章

  • 获取字符、整数和日期字段的字段 oldValue 和 newValue

    我试图只保留表更改的历史记录 所以我想获取一个字段在更改为oldValue之前的值 然后获取它更改为newValue的值 两个值都应转换为字符串 因此 这是该表的一个示例 PartNumber Description 12345 Test
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString
  • 在 SQLite 数据库中存储日期时间值的最佳方式(Delphi)

    我将把日期时间值存储在 SQLite 数据库中 使用 Delphi 和 DISqlite 库 数据库的本质是它永远不需要在计算机或系统之间传输 因此互操作性不是一个限制 相反 我的重点是阅读速度 日期时间字段将被索引 我将对其进行大量搜索
  • 如何读取注册表项的默认值

    我有一个 Delphi XE2 项目来使用注册表项进行某些操作 所以我定义了以下代码 procedure TMainForm BitBtn01Click Sender TObject var RegistryEntry TRegistry
  • Delphi - 如何获取 USB 可移动硬盘和记忆棒的列表?

    在我的应用程序 Delphi 中 我需要列出所有 USB 存储设备 这些可以是闪存棒or外部存储驱动器 有一个Jvcl成分JvDriveCombo 并且它有DriveType属性 问题是我是否选择DriveType Fixed那么除了外部驱
  • 在Delphi 7中,为什么我可以给const赋值?

    我将一些 Delphi 代码从一个项目复制到另一个项目 发现它在新项目中无法编译 但在旧项目中可以编译 代码看起来像这样 procedure TForm1 CalculateGP const Price money 0 begin Pric
  • 调试器异常错误和内存超调

    我尝试运行以下代码 但它显示有关内存地址的错误 并显示一条消息 循环后 n 可能未定义 请看一看 var n max integer n integer r R1 f h0 Array of Real const h 0 00889 nip
  • TColorProperty德尔福柏林10.1.2?

    我正在尝试将组件从 Delphi 7 转换为 Delphi Berlin 平面组件 https sourceforge net projects flatstyle https sourceforge net projects flatst
  • 如何使用 Gmail 的 SMTP 和 Indy 10 发送电子邮件?

    我正在使用 Delphi 2009 和 svn 中最新的 Indy 10 通过 SMTP 发送电子邮件 但它不适用于 Gmail Google Apps 托管域 当我尝试发送电子邮件时 我收到 必须首先发出 STARTTLS 命令 我尝试用
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 如何用不同的颜色绘制选定的列表框项目?

    是否可以更改 TListBox 中的项目选择焦点颜色和文本颜色 当项目中未启用主题或列表框样式设置为所有者绘制时 项目周围的选择将被涂成蓝色 我相信这是由系统的外观设置全局定义的 我想将所选项目的颜色更改为自定义颜色 举个例子 结果会是这样
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • logback的“谨慎模式”是如何实现的?

    The 审慎模式 http logback qos ch manual appenders html prudentlogback 中的序列化所有 JVM 之间的 IO 操作 写入同一文件 可能运行在不同的主机上 在其他日志记录框架中 如果
  • 如何在Delphi中将对象方法作为参数传递,然后调用它?

    我担心这可能是一个有点愚蠢的问题 但这让我很难过 我正在寻找将对象的方法传递到过程中的最简单的方法 以便过程可以调用对象的方法 例如 超时后 或者可能在不同的线程中 所以基本上我想 捕获对对象方法的引用 将该引用传递给过程 使用该引用 从过
  • 为什么 Delphi 中的 ADO Next 记录处理速度变慢?

    我有一个多年前开发的 Delphi 4 程序 它使用Opus 直接访问 http sourceforge net projects directaccess 按顺序搜索 Microsoft Access 数据库并检索所需的记录 Delphi
  • 如何在按键时识别 unicode 键?

    我的应用程序使用 unicode 字符 并且我有几个文本字段 我想限制用户输入特殊字符 例如 begin if not Key in a z A Z 0 9 13 8 then Key 0 if Key 13 then bOk Click
  • D2010编译行数差异

    构建项目时 有两个地方会报告源代码行数 在编译进度对话框中 项目下 信息 在 Delphi 2007 中 对于我们正在构建的项目 这两个数字是相同的 在 Delphi 2010 中 这两个数字截然不同 1st 计数多出 100 万行或 40
  • 如何将枚举类型放入字符串列表中?

    这行代码 ShowMessage GetEnumName TypeInfo TAlign 1 返回 alTop 当我想使用字符串变量 TAlign 而不是TAlign时 如何将枚举类型的所有值放入字符串列表中 就像是 ShowMessage
  • 为什么 TImage 旋转我的图像?

    编写一个移动应用程序 它从安全网站提取图像 如下所示 第一个图像 提取不正确 注意网络版本与移动版本 第二个图像在网站上正确显示 但 Delphi TImage 由于某种原因正在旋转它我不明白为什么 旋转设置为 0 并且在 TImage 组

随机推荐

  • Chrome webkit 检查器中不断生成“不安全的 JavaScript 尝试使用 URL 访问框架...”错误

    例如 当使用 Facebook API 时 Chrome 或任何其他 webkit 浏览器 会抛出大量 不安全的 JavaScript 尝试使用 URL 访问框架 它不会干扰实际操作 但确实使 javascript 控制台基本无法使用 我想
  • proxy_pass 不使用 /etc/hosts 解析 DNS

    在 Nginx 中proxy pass指令未使用以下命令解析 DNS etc hosts文件 有什么方法可以实现这种可能性 也许利用 Lua 作为最后的手段 如果您有一台带有 systemd 的服务器 您可以使用它附带的名称服务器 syst
  • 如何了解我的 Android 应用在用户设备上消耗了多少电池?

    我正在编写一个应用程序来评估 Android 上蓝牙 P2P 网络的可行性 我注意到 在 Galaxy Nexus 上 它使用的电池很少 而在 Nexus S 上 它消耗电池的速度非常快 这是由于蓝牙导致CPU负载过高直接导致的 现在 我想
  • Camel中如何动态添加和启动路由?

    我正在尝试从 Camel 的路线中删除一些样板 例如 让我们考虑两条相似的路线 并且可以生成它们的大部分内部内容 我创建了一个组件 模板 它创建了TemplateEndpoint 并修改了 XML 配置以使用模板组件 自定义方法Templa
  • 适用于 Android 的自定义旋转对话框

    如何制作自定义主题 Android Spinner 对话框 该博客有一个示例 可能可以解决您的问题 http www mokasocial com 2011 03 easily create a default custom styled
  • SKLearn Naive Bayes:在 tfidf 矢量化后添加特征

    因此 我的任务是训练一个电话记录模型 以下代码执行此操作 一些背景信息 x 是一个字符串列表 每个第 i 个元素是一个完整的转录本 y 是布尔值列表 表示调用的结果是正还是负 以下代码有效 但这是我的问题 我想将通话时长作为一项训练功能 我
  • 带 ProgressBar 的 Endless RecyclerView 用于分页

    我正在使用一个RecyclerView http developer android com reference android support v7 widget RecyclerView html并以十个为一组从 API 获取对象 对于
  • PHP 未在正确的位置回显

    我在我的 WordPress 网站上运行一些 PHP 代码 当 PHP 运行以回显某些信息时 它没有在正确的位置回显它 代码的缩写版本是 div class description cms div h2 Search By Category
  • 使用 Ruby On Rails 进行事务操作

    我在控制器内有一个复杂的操作 可以对数据库执行多个更新查询 我怎样才能做出这个动作行为类似于交易没有任何结构重构 MyModel transaction do begin model update stuff sub model updat
  • 如何让控件重绘 Windows 窗体?

    我不太确定 重绘 是我正在寻找的 我是手工设计 Windows 窗体的新手 我创建了一个类 它将使用 TableLayoutPanel 作为传递的变量 并在该表格布局面板中进行自己的设计 以便可以重用该控件并调整其参数以适应其包含的数据 我
  • 用于本机 C++ 的 C++/CLI 包装器,可在 C# 中用作参考

    标题解释了 我有本机 C dll 正在为其编写 C CLI 包装器 这些包装器将依次导入到 C 中作为参考 问题是在 C 中我看不到包装器中的类 从 DLL 导入 我应该使用哪些关键字以及如何重新声明我的本机 C 对象以在 C 中可见 好的
  • 角度从 1 开始 ngFor 索引

    ngFor索引是否可以从1而不是0开始 let data of datas let i index 1 没用 ngFor let item of items slice 1 let i index 切片管 https angular io
  • 在 Visual Studio 2015 中使用和导出 std::string 和 std::vector

    使用 VS2013 和合适的导出宏 我可以使用此示例代码导出 std string 和 std vector ifdef MSC VER Explicit template exports c EXPORT TEMPLATE templat
  • Qt 安装程序框架 - 在开始菜单中为所有用户创建快捷方式

    使用安装程序框架 我想为我的应用程序创建一个安装程序 该应用程序由管理员安装在 PC 上 然后该应用程序由不同的用户使用 在安装程序中 我创建从可执行文件到开始菜单的快捷方式 这是在installscript js通过命令 componen
  • Angularjs - 元素上的多个指令,其中一个是隔离范围

    想知道是否有人可以解释当前的行为 我有一个具有隔离范围的指令 称之为 dirA 然后我在上面添加了另一个指令 dirB 期望第二个指令获取isolate指令创建的每个范围 dirB 获取控制器范围 为什么它不能获得 dirA 为该元素创建的
  • Rails - 使用父级的范围父级验证嵌套属性的唯一性

    我在 Rails 中对具有父级的嵌套属性进行范围唯一性验证时遇到问题 背景 我有一个包含 3 个模型的 Rails 4 应用程序 app models account rb class Account lt ActiveRecord Bas
  • 在 C# 中实现这 3 个类的最佳方式:Vector、Direction(单位向量)、Point

    所有点都是向量 所有向量都是点 所有方向都是向量 并非所有向量都是方向 这不应该意味着不允许双向转换 我希望最好将运算符全部覆盖一次 因为它们都是完全相同的 在 C 中 我可以定义 class Vector float x y z 并执行
  • Couchbase 几秒后超时

    我有大约 100 200k 个小文档 其中包含 base64 编码的图像 非常小的图像 我正在尝试将所有这些文档插入 Couchbase 但在前 28k 个文档 总大小约为 185 Mb 后我不断收到此错误 Error Client Sid
  • npm 包上的“at”(@) 前缀是什么意思?

    In the Angular 组件路由器文档 https docs angularjs org guide component router我刚刚偶然发现了一个我以前从未见过的 npm 命令 我不明白发生了什么 npm install an
  • Delphi:如何使用 $OVERFLOWCHECKS OFF 禁用溢出检查?

    我有一些代码会导致下溢 var t1 t2 delta DWORD begin t1 0xffffff00 t2 0x00000037 delta t2 t1 减法本身does生成上溢 下溢 但我不希望 Delphi 抛出EIntOverf