如何在运行时检测某些编译器选项(如断言)是否设置为 ON?

2024-03-19

Delphi 中检查断言是否有效的条件是什么?

当断言在代码中不活动时,我希望能够做一些事情来抑制有关未使用变量的提示,例如

procedure Whatever;
var
   v : Integer;
begin
   v := DoSomething;
   Assert(v >= 0);
end;

在上面的代码中,当断言未激活时,会提示变量 v 被分配了一个从未使用过的值。

该代码位于将在各种环境中使用的库中,因此我能够专门测试断言,而不是像 DEBUG 这样的自定义条件。


您可以使用$IFOPT http://docwiki.embarcadero.com/RADStudio/en/IFOPT_directive_%28Delphi%29指示:

{$IFOPT C+}
  // this block conditionally compiled if and only if assertions are active
{$ENDIF}

所以你可以像这样重写你的代码:

procedure Whatever;
{$IFOPT C+}
var
   v : Integer;
{$ENDIF}
begin
   {$IFOPT C+}v := {$ENDIF}DoSomething;
   {$IFOPT C+}Assert(v >= 0);{$ENDIF}
end;

这会抑制编译器提示,但也会让你眼睛流血。

我可能会这样抑制它:

procedure SuppressH2077ValueAssignedToVariableNeverUsed(const X); inline;
begin
end;

procedure Whatever;
var
   v : Integer;
begin
   v := DoSomething;
   Assert(v >= 0);
   SuppressH2077ValueAssignedToVariableNeverUsed(v);
end;

抑制函数接收的无类型参数足以抑制 H2077。以及使用inline意味着编译器不会发出任何代码,因为没有函数调用。

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

如何在运行时检测某些编译器选项(如断言)是否设置为 ON? 的相关文章

  • 德尔福:idHttp+SSL

    请解释一下如何使用 SSL https 从服务器下载文件 我在互联网上没有找到合适的答案 每个人都说 TIdSSLIOHandlerSocket 但我只有 TIdSSLIOHandlerSocketOpenSSL 如果我使用 TIdSSLI
  • Delphi XE2 中的 TDataModule.ClassGroup 伪属性到底有什么作用?

    我尝试将一个组件从一个数据模块复制并粘贴到 Delphi XE2 中的另一个数据模块中 该组件是一个 Fast Report 数据源链接组件 数据模块是全新的 刚刚在 XE2 中创建 其他人也遇到了同样的问题并报告了质量中心为106369
  • 如何在Java程序中检索环境变量的修改值(外部修改的)?

    是否可以在 Java 程序中检索环境变量的修改值 我尝试使用System getenv 但新的值并没有体现在程序中 场景是这样的 该程序检索环境变量的值 当程序仍在运行时 该变量的值可以从外部更改 甚至可以是手动过程 例如在 Windows
  • TEdit onclick 全选?

    每当用户单击 TEdit1 或单击选择其中的某些文本时 如何选择 TEdit1 的所有文本 执行超出默认行为的任何操作都可能非常危险TEdit控制 您的用户知道标准 Windows 控件的行为方式 任何偏离此的行为都可能导致混乱 默认情况下
  • 线程关闭期间 Win64 Delphi RTL 中的内存泄漏?

    很长一段时间以来 我注意到我的服务器应用程序的 Win64 版本存在内存泄漏问题 虽然 Win32 版本工作正常 内存占用相对稳定 但 64 位版本使用的内存却定期增加 可能 20Mb 天 没有任何明显的原因 不用说 FastMM4 没有报
  • 支持非致命故障的 Python 测试框架

    我正在评估自动化系统测试的 测试框架 到目前为止我正在寻找一个Python框架 在 py test 或鼻子中 我看不到类似我从谷歌测试框架中知道的 EXPECT 宏的东西 我想在一个测试中做出多个断言 同时不在第一次失败时中止测试 我在这些
  • DELPHI win32 的 ORM [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 Delphi Win32 的 ORM 或类似的东西吗 Marco Cantu 是 Insta
  • #ifdef MACRO 相当于注释吗

    假设 MACRO 没有定义 这些是等价的 ifdef MACRO Not valid C or C code endif Not valid C or C code 在 GCC 4 7 1 中 它似乎是等效的 但是否有预处理器可以做更多的事
  • 如何修复 Delphi Prism ASP.NET 错误:“解析器错误消息:‘Oxygene’不是受支持的语言”

    我在 Delphi Prism 中编写了一个 ASP NET Web 应用程序 不是网站 在我的开发机器上一切正常 但是当我将其安装在测试服务器上时 出现以下错误 Server Error in MyApp Application Pars
  • 使用 GdiPlus 卸载 DLL 时程序挂起

    我有一个加载 DLL 的应用程序 它使用德尔福 GDI 库 http sourceforge net projects delphigdiplus 该应用程序在卸载 DLL 时挂起 调用免费图书馆 https msdn microsoft
  • delphi分组框标题颜色变化

    我正在使用 BDS 2006 想知道您是否可以使用项目中存在的 XPmanifest 更改组框和单选按钮组标题的颜色 因为它始终是蓝色 唯一的方法是重写 Paint 方法TGroupBox http docwiki embarcadero
  • Indy FTP 传输类型

    我正在使用 IdFTP Indy 10 组件从远程位置下载一些文件 zip 和 txt 在获取每个文件之前 我将 TransferType 设置为二进制 IdFTP TransferType ftBinary IdFTP Get ASour
  • 如何在动态创建的一组 editText 上设置 onFocusChangeListener()?

    我有这段代码 每次前一个 lineaLayout 的 edittext 失去焦点时 我都会膨胀一个包含 3 个 editText 的 LinearLayout 我只想在最近创建的 editTexts 上使用 onFocusChangeLis
  • C# 编译器如何删除发布版本中的 Debug.Assert?

    我最近正在浏览一些代码 并考虑是否需要小心放置在其中的表达式Debug Assert语句 例如昂贵的操作或具有副作用的操作 然而 编译器似乎非常聪明地完全删除了Assert陈述和内在表达 例如 以下内容只会在调试版本上打印 static v
  • 如何使用用户输入来寻址 Pascal 中的特定变量(Eval/Exec?)

    我正在尝试在分形程序中做一些非常具体的事情隆起7X http apophysis 7x org 使用的脚本语言是Pascal 该项目是用德尔福写的 https svn code sf net p apophysis7x svn trunk
  • 获取字符、整数和日期字段的字段 oldValue 和 newValue

    我试图只保留表更改的历史记录 所以我想获取一个字段在更改为oldValue之前的值 然后获取它更改为newValue的值 两个值都应转换为字符串 因此 这是该表的一个示例 PartNumber Description 12345 Test
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • 如何将FireMonkey表单无缝嵌入VCL表单中?

    我使用了中描述的技巧这个问题 https stackoverflow com questions 7315050 delphi xe2 possible to instantiate a firemonkey form in vcl app
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 未定义条件编译符号

    我无法让 Visual Studio 按照我的预期运行 我创建了 2 个配置文件 一个定义了符号 FOO 另一个定义了符号 BAR 我有这个代码 static class MyClass if FOO public static strin

随机推荐

  • 修改包含数据的列类型,而不删除数据

    我有一个专栏 我认为该专栏的声明是错误的 它包含数据 我不希望丢失数据 我希望将定义从 varchar max 更改为 varchar 整数 我的印象是我不能只改变列类型 最好的方法是创建临时列 column2 将数据从有问题类型的列传输到
  • Subversion 更新问题

    当我尝试更新我的存储库时 出现以下错误 有人能解释一下这是什么意思吗 命令 更新错误 网址错误 http mysvn foo 错误 现有目录错误 C SVN MyProj NinjectModules Models 不匹配错误 预期 URL
  • 保留 SQL 中的文本格式

    我有一个文本区域 可将其内容插入到 SQL 表中 有没有办法保留文本的格式 然后在 HTML 中使用它 我假设您正在谈论保留换行符 Either 输出 标签内的文本 or 在插入数据库之前将换行符转换为 标记 例如 PHP 中的 nl2br
  • R 噩梦:Yosemite、R、RStudio 和 Homebrew

    我使用配备 OS X Yosemite 10 10 2 的 MacBook Pro 13 Retina 2013 年末 我不希望我最大的敌人遇到这种情况 也许吧 噩梦按时间顺序排列 从官方网站下载 R 和 RStudio 运行这两个应用程序
  • 将数组数据分解为spark中的行[重复]

    这个问题在这里已经有答案了 我有一个数据集 如下所示 FieldA FieldB ArrayField 1 A 1 2 3 2 B 3 5 我想爆炸数据数组字段所以输出将如下所示 FieldA FieldB ExplodedField 1
  • 提高 Python Tesseract OCR 的准确性

    我在用pytesseract https pypi org project pytesseract 随着openCV https pypi org project opencv python 在 Python 中的简单 django 应用程
  • 无法使用 Apache FOP 生成 PDF

    我正在尝试使用 Apache FOP 使用 XML 数据和 XSL 样式表创建 PDF 但我不断收到以下错误 org apache fop apps FOPException org apache fop fo ValidationExce
  • 显示寄存器内容

    您好 我需要帮助显示寄存器的内容 我的代码如下 我已经能够显示数据寄存器的值 但我想显示标志状态 例如 1 或 0 如果还显示其他寄存器 如 esi ebp 的内容 将会很有帮助 我的代码没有打印标志的状态 我缺少什么 section te
  • 清除回发时的查询字符串

    简单的问题 但我不知道该怎么做 我有一个带有 GridView 的页面 最初使用查询字符串填充 获取查询字符串值后 我不需要查询字符串 因为我使用 DropDownList 的值来填充 GridView 我怎样才能摆脱它 回发并不能清除它
  • 以编程方式将列表作为 Web 部件插入 WSS 3.0 中的 Web 部件页面中

    我尝试在网上搜索以编程方式将列表作为 Web 部件插入到 Web 部件页面中 但不够幸运 我有什么想法或想法以编程方式将列表作为 Web 部件插入到 Web 部件页面中 非常感谢 首先添加这些 using 语句 using Microsof
  • 使用插件 dsl 语法应用 hibernate-gradle-plugin?

    我想用org hibernate hibernate gradle plugin在我的项目中使用插件 dsl 风格 这是我的build gradle kts插件部分 plugins kotlin jvm version 1 3 31 id
  • 如何解析 .msstyles 文件?

    我需要从 msstyles 文件 Windows XP 视觉样式文件 中提取一些位图 但我不知道从哪里开始 我似乎找不到任何有关如何执行此操作的文档 并且文件格式似乎是二进制的并且不容易解析 我已经能够使用以下方法自行提取位图 IntPtr
  • 在 javascript 中更改 RGB 颜色的色调

    如同this https stackoverflow com questions 6443990 javascript calculate brighter colour 如何增加亮度 我想更改 RGB 十六进制 颜色的色调 Say cha
  • 获取 woocommerce 类别及其子类别

    我想在前端获取所有 woocommerce 类别 其子类别如下结果 ul li a href Link a ul li a href Submenu link a li ul li ul 这是我所拥有的 但这不是我想要的
  • 如何在 Django 1.7 中重置迁移

    我知道有一个与此相同的标题 但问题不同 我设法使我的开发机器迁移和生产迁移不同步 我有一个使用 South 的 Django 应用程序 我有自己的工作流程 运行良好 这可能不是正确的做事方式 但我没有遇到任何问题 基本上我有一个脚本将生产数
  • 使用 Graph API 和 Android SDK 将图片上传到 Facebook

    我正在尝试使用 graph api 将照片上传到 facebook 但不断出现 OutOfMemory 异常 上传的代码是这样的 private void PostPhoto SessionHandler facebook Uri phot
  • Pyspark:如何过滤两列值对的列表?

    所以我有一个 PySpark Dataframe 我想用一个 长 有效列表来过滤它pairs两列 假设我们的数据框的名称是df和列col1 and col2 col1 col2 1 A 2 B 3 1 null 2 A null 2 nul
  • 在 Android 中处理 XML 的最佳方法是什么

    与 PC 服务器相比 Android 设备速度慢得多 内存也低得多 那么在 Android 中处理 XML 的最佳方法是什么 我有一组非常复杂的 xml 需要解析 SAX 或 DOM 都会导致代码过多 有人有好的建议吗 我想让它干净又快速
  • 将 Java.logging 扩展为另一个日志级别?

    我想知道是否可以将标准 java 记录器 java util logging Logger 扩展为另一个记录器级别 目标是 日志文件中应该显示 错误 而不是 严重 那可能吗 或者我必须使用不同的记录器 例如 Log4j 多谢 如果您只想打印
  • 如何在运行时检测某些编译器选项(如断言)是否设置为 ON?

    Delphi 中检查断言是否有效的条件是什么 当断言在代码中不活动时 我希望能够做一些事情来抑制有关未使用变量的提示 例如 procedure Whatever var v Integer begin v DoSomething Asser