通过预处理器禁用或启用代码

2023-12-11

在 C++ 中我会写

bool positive (int a)
{
#ifdef DEBUG
    cout << "Checking the number " << a << "\n";
#endif
    return a > 0;
}

在 OCaml 中我可以写

let positive x = 
    begin
        printf "Checking the number %d\n" x;
        x > 0
    end 

但是,如何在不处于调试模式时禁用 printf 语句呢?


无需预处理,您可以简单地将全局标志定义为let debug = true和写:



if debug then
  printf ...;
  

如果出现以下情况,此代码将被 ocamlopt 删除debug是假的。也就是说,它很麻烦,并且应该仅在生产代码的性能至关重要的情况下使用。

另一个优化程度较低的选项是使用可变标志。这更方便,因为您不必重建程序来激活或停用调试日志记录。您可以使用命令行选项来控制它(请参阅文档Arg模块)。



let debug = ref false

...

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

通过预处理器禁用或启用代码 的相关文章

随机推荐

  • 使用 c# 将字符串分成对

    有没有一种方法可以在不查看索引的情况下将字符串分成对 例如 TVBMCVTVFGTVTB 将被分解为字符串列表 如下所示 电视 BM CV 电视 FG 电视 TB 也许我应该用问题的措辞来说明它们在使用字符串将它们分成组时类似于 strin
  • 我将如何创建 JFreeChart 散点图最佳拟合线

    我有一个要包含在 JFreeChart 散点图中的点数组列表 效果很好 但我现在想要一条最适合的线 经过一番查找 JFreeChart不直接支持这样的计算 所以我想做的是自己计算一下 然后手动在图表中贴一条线 如何在散点图中得到一条线 XY
  • 如何限制泛型类中允许作为“T”的类型?

    我有课Foo
  • Laravel 种子问题,laravel 正在寻找复数表名

    我刚刚开始学习 Laravel 在为测试表生成种子时遇到问题 控制台错误说 未找到基表或视图 1146 表 laravel testms 不存在 我的表名为 testm 我不知道它为什么寻找 testms TestmFactory php
  • 使用 Arduino 库与 C++ 的 stringstream 链接错误

    我正在使用一个esp8266和 一起平台写一个简单的草图 include
  • 通过使用 Vaadin-CDI-Integration Addon 启用 EJB 注入 Vaadin 7 UI

    我无法成功集成官方 Vaadin CDI Integration Addon 因为在完成官方集成说明后 以下内容Exception如果我重新加载已经发布的 URL 则会抛出该错误localhost 8080 App restartAppli
  • Clang 看不到基本标题

    我尝试使用 Clang 在 Fedora 20 上编译简单的 hello world 得到以下输出 d cpp 1 10 致命错误 找不到 iostream 文件 include
  • Angular 2 使用 ngFor 设置并绑定复选框

    我有一个像这样的数组 objectArray name Car name Bike name Boat name Plane 模板是这样的 li a href class small a li
  • 任务不可序列化 - Spark Java

    我在 Spark 中收到任务不可序列化错误 我已经搜索并尝试使用一些帖子中建议的静态函数 但它仍然给出相同的错误 代码如下 public class Rating implements Serializable private SparkS
  • 仅在 WooCommerce 中的特定日期销售某些产品

    我想通过 Woocommerce 出售某些指定的商品仅周日 如果有人试图在周日以外购买 它应该给出一个错误 商店中剩余的商品可以随时购买 这可能吗 任何曲目都非常值得赞赏 Example 我有一款名为 Sunday Tapas 的产品 产品
  • 如何在 bash 脚本中对命令输出进行着色?

    我正在尝试几天来更改 bash 脚本中命令的颜色输出 我尝试了一些工作流程 例如陷阱但没有成功 唯一部分起作用的是这段代码 bin bash GRN e 32m CYN e 36m END e 0m echo e GRN Formating
  • Spring Data JPA 中的订单按日期描述限制

    我试图通过使用限制查询来限制查询结果 如果没有限制 查询将按预期工作 Query SELECT a FROM DrmAdpodTimeSlot a where a startTime gt startTime order by a star
  • 精确的字符串到整数哈希函数

    我想将 char 数组哈希为 int 或 long 结果值必须遵守给定的精度值 我一直在使用的功能如下 int GetHash const char zKey int iPrecision 6 FROM http courses cs vt
  • 添加删除程序图标

    我有一个 WIX 安装程序项目 用于安装我的产品 代码不是我写的 它在添加 删除程序中显示一个图标 我想知道它在源代码中的哪里指定 该图标是我的产品的主要可执行文件 我尝试搜索代码 但在整个代码中找不到任何 ARPProductICON 单
  • 如何调用 .Net 程序集中的嵌入式资源 exe?

    我有一个非 Net 可执行文件 它作为嵌入式资源包含在我的 net 程序集中 有没有一种方法可以运行这个可执行文件 而不需要将其写入磁盘并启动它 这就是 Net 2 0 您可能会尝试将 exe 注入到挂起的进程中 然后唤醒被劫持的进程 但这
  • 无法设置 NSUserDefaults 字段

    我的应用程序初始化 第一次 中有以下代码 NSUserDefaults defaults NSUserDefaults standardUserDefaults NSString uid 1 defaults setObject uid f
  • 如何判断 Android 设备是否具有开放附件模式

    有谁知道如何检查这个 我刚刚购买了三星 Galaxy Tab 2 运行 Android 4 0 3 的 7 英寸版本 打算用它连接到我的 Arduino Mega ADK 板 但我不确定 Galaxy Tab 是否具有此处列出的必要的开放附
  • vbScript 打开 Excel 但不加载宏/模块?

    我的处境很奇怪 我创建了一个 vbs 脚本来打开我的 Excel 文件 我在 WorkBook open 方法中定义了 vba 代码 我认为创建一个 vbs 脚本来打开我的 Excel 将调用我的 workBook open 方法并执行其中
  • 如何忽略python日志记录过程中产生的异常?

    我正在一个大的 python 模块 Python 2 6 6 中工作 并在数千个地方进行日志记录 并且我正在使用 python 的记录器模块 现在 我想忽略日志记录期间生成的异常 可能的基本场景之一是 import glob import
  • 通过预处理器禁用或启用代码

    在 C 中我会写 bool positive int a ifdef DEBUG cout lt lt Checking the number lt lt a lt lt n endif return a gt 0 在 OCaml 中我可以