mql5中的OOP、模板和宏,细微之处和用途 - 页 17 1...101112131415161718192021222324...28 新评论 Seric29 2019.08.24 14:37 #161 Taras Slobodyanik: 宏是否会返回值? 好吧,这里有一个代码例子 #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #define N 0.0 #define S 0 double Try_helper; #define Try(EXPR, MES) \ Try_helper = EXPR; \ if (Try_helper <= 0.0) { \ printf("Error: %s ", MES); \ return 4; \ } int OnInit() { int qw=S; return(INIT_SUCCEEDED);} Taras Slobodyanik 2019.08.24 15:22 #162 Seric29: 好吧,这里有一个示例代码 宏替换意味着所有这些代码(在定义中),每次都会在程序中的指定位置被替换掉。因此,事实上,你不是做一个函数并调用它,而是在代码里面多次复制这个函数,作为一段代码。 如果你从一个宏中返回,它就是从所有插入这个宏的代码中返回。 Seric29 2019.08.24 15:55 #163 Taras Slobodyanik: 宏替换意味着所有的代码(在定义中),每次都会被替换到程序的指定位置。事实上,你不是制作一个函数并调用它,而是在代码里面多次复制这个函数,作为一段代码。 如果你从一个宏中返回,这就是从插入这个宏的整个代码中返回。 事实证明,你不能写一个宏函数。 Taras Slobodyanik 2019.08.24 16:52 #164 Seric29: 事实证明,没有办法写一个宏函数。 宏替换是用一个文本替换另一个文本(在源代码中),根据定义它不能是一个函数。 Seric29 2019.08.25 19:22 #165 请写下你对这个https://www.mql5.com/ru/forum/160683/page945#comment_12958065(编号9448)的看法。 Seric29 2019.09.10 20:37 #166 如何在不跳转到新行 的情况下编写2个宏,它大大增加了行数,大大延长了程序的长度,下面是一个例子 #define I int #define B bool//это просто пример ни в коем случае не воспринимайте всерьёз 巨集B不再起作用了。 Igor Makanu 2019.09.28 21:35 #167 是否可以将变量名转换为字符串? 它不是那样工作的。 #define p_func(NAME) Print("This is ##NAME") //+------------------------------------------------------------------+ void OnStart() { int QWERTY; int zxcvbn; p_func(QWERTY); //This is ##NAME p_func(zxcvbn); //This is ##NAME } Dmitry Fedoseev 2019.09.29 01:26 #168 Seric29: 伙计们,我想写一个makros(a)的宏,它将这样工作:如果a等于1,它将返回任何int类型的值,如果a等于2,它将返回任何double类型 的值,如果a等于3,它将返回任何bool类型的值。有可能做到这一点吗? 为了什么?为了什么?你打算在哪里使用它? fxsaber 2019.09.29 05:02 #169 Igor Makanu: 是否可以将变量名转换为字符串? #define p_func(NAME) Print("This is " + #NAME) [删除] 2019.09.29 06:56 #170 Seric29: 伙计们,我想写一个宏makros(a),它的工作原理是:如果a等于1ce,那么该宏将返回int类型的任何值;如果a等于2ke,那么该宏将返回double类型 的任何值;如果a等于3ke,那么该宏将返回bool类型的任何值。有可能做到这一点吗? #define GET_HELPER_1 1 #define GET_HELPER_2 1.0 #define GET_HELPER_3 true #define GET_EXPAND(I) GET_HELPER_##I #define GET(I) GET_EXPAND(I) void OnStart() { Alert(GET(1), " ", GET(2), " ", GET(3)); } 在μl中,你可以不用GET_EXPAND,但这是μl特有的东西,它更正确。好吧,由于缺乏逗号运算符,μl宏非常有限(虽然通过拐杖......)。 ZZY:当然,这都是在编译时进行的。 ZZZY:顺便说一下,如果有一个幽灵操作员,你可以这样做。 class Q{ public: operator int(); operator double(); operator bool(); }; ... Q q; int i = q; // call operator int double d = q; // call operator double bool b = q; // ... 1...101112131415161718192021222324...28 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
宏是否会返回值?
好吧,这里有一个代码例子
好吧,这里有一个示例代码
宏替换意味着所有这些代码(在定义中),每次都会在程序中的指定位置被替换掉。因此,事实上,你不是做一个函数并调用它,而是在代码里面多次复制这个函数,作为一段代码。
如果你从一个宏中返回,它就是从所有插入这个宏的代码中返回。
宏替换意味着所有的代码(在定义中),每次都会被替换到程序的指定位置。事实上,你不是制作一个函数并调用它,而是在代码里面多次复制这个函数,作为一段代码。
如果你从一个宏中返回,这就是从插入这个宏的整个代码中返回。
事实证明,你不能写一个宏函数。
事实证明,没有办法写一个宏函数。
宏替换是用一个文本替换另一个文本(在源代码中),根据定义它不能是一个函数。
如何在不跳转到新行 的情况下编写2个宏,它大大增加了行数,大大延长了程序的长度,下面是一个例子
巨集B不再起作用了。
是否可以将变量名转换为字符串?
它不是那样工作的。
伙计们,我想写一个makros(a)的宏,它将这样工作:如果a等于1,它将返回任何int类型的值,如果a等于2,它将返回任何double类型 的值,如果a等于3,它将返回任何bool类型的值。有可能做到这一点吗?
为了什么?为了什么?你打算在哪里使用它?
是否可以将变量名转换为字符串?
伙计们,我想写一个宏makros(a),它的工作原理是:如果a等于1ce,那么该宏将返回int类型的任何值;如果a等于2ke,那么该宏将返回double类型 的任何值;如果a等于3ke,那么该宏将返回bool类型的任何值。有可能做到这一点吗?
在μl中,你可以不用GET_EXPAND,但这是μl特有的东西,它更正确。好吧,由于缺乏逗号运算符,μl宏非常有限(虽然通过拐杖......)。
ZZY:当然,这都是在编译时进行的。
ZZZY:顺便说一下,如果有一个幽灵操作员,你可以这样做。