2

DEBUG我有一些 mql5 代码,如果设置了宏,我想打印调试消息。我想DebugPrint为这些调试消息使用不同的功能(就此而言)。我的第一次尝试是创建一个常规函数,但变量参数似乎不起作用。然后我尝试使用预编译器根据这个答案DebugPrint删除-calls ,但是编译器的预处理器似乎也不理解变量参数列表。这是我试过的代码:

#ifdef DEBUG
#define DebugPrint(...)
#else
#define DebugPrint(...) Print(__VA_ARGS__)
#endif

关于如何实现我想要做的任何想法?

4

1 回答 1

1

我在 MQL4/5 上的几美分:


预处理器指令:

虽然修订后的New -MQL4.56789编译器为预处理器指令语法打开了一些新的、更复杂的结构#define,但在尝试在生产代码中使用它们时,我几乎总是手忙脚乱。


可变参数:

MQL4/5 是一种强类型的编译语言,因此不提供可变参数函数的方法。使用最近的一些语法帮助,来自(OOP)基于类的函数(方法)调用接口覆盖,并且可能使用来自所谓函数的一些高级抽象template--s,有机会为您创建某种语法支持#define-依赖行为。


函数重载,
template-s
和 -
typename依赖动作:

尽管这些技术已经为 MQL4/5 软件领域带来了更多“新”编译器功能,但额外的复杂程度并不能证明这些努力是合理的,因为所产生的原则在其使用受到限制的情况下无法使用exportvirtual#import结构体。


那么如何进行这项工作呢?

好吧,为了快速和迭代的开发需求,人们可能会求助于几乎可变的” PrintFormat( DEBUG_MASK, ..., ..., ... );,使用上下文完整(已知)匹配的一组属性与静态的、特定于上下文的#define-ed匹配DEBUG_MASK。嵌套的构造FormatString( MASK_A, par1, par2[, FormatString( MASK_B, par3, par4[, FormatString( ... )[, ... ] )[, ... ])都留给自己的想象。

于 2016-12-28T18:20:15.540 回答