我有一些mql5代码,如果设置了DEBUG宏,我想输出调试消息。我想为这些调试消息使用一个不同的函数(DebugPrint )。我的第一个尝试是创建一个常规函数,但变量参数似乎不起作用。然后,我尝试使用预编译器删除DebugPrint-calls based on this answer,但是编译器的预处理器似乎也无法理解变量参数列表。这是我尝试过的代码:
#ifdef DEBUG
#define DebugPrint(...)
#else
#define DebugPrint(...) Print(__VA_ARGS__)
#endif关于如何实现我想要做的事情,有什么建议吗?
发布于 2016-12-29 02:20:16
我对MQL4/5的几点看法:
预处理器指令:
虽然修改后的New-MQL4.56789编译器为#define预处理器指令语法打开了一些新的、更复杂的构造,但在尝试在生产代码中使用它们时,我几乎总是吃尽苦头。
可变参数:
MQL4/5是一种强类型的编译语言,因此不提供可变函数的方法。有了一些最新的语法帮助,来自( OOP )基于类的函数(方法)调用接口覆盖,并可能使用所谓的function-template-s,中的一些高级抽象,就有机会为您的#define-dependent行为创建某种语法支持。
函数重载,
template-s
和
typename-dependent操作:
虽然这些技术为MQL4/5软件领域带来了更多的“新”编译器特性,但额外的复杂性水平并不能证明所做的努力是合理的,因为在export,virtual或#import构造限制其使用的情况下,所产生的原则是不能使用的。
那么,如何让它工作呢?
好的,为了快速和迭代开发的需要,可以使用针对静态的、特定于上下文的"almost-variadic" DEBUG_MASK.属性的上下文完全(已知)匹配的PrintFormat( DEBUG_MASK, ..., ..., ... );来实现#define-edFormatString( MASK_A, par1, par2[, FormatString( MASK_B, par3, par4[, FormatString( ... )[, ... ] )[, ... ])的嵌套构造留给了人们自己的想象。
https://stackoverflow.com/questions/41287335
复制相似问题