错误、漏洞、问题 - 页 2864 1...285728582859286028612862286328642865286628672868286928702871...3184 新评论 fxsaber 2020.10.05 12:59 #28631 Andrey Khatimlianskii:那么,为什么它不工作呢? 最有可能的是,这种方法在任何地方都不起作用。因为有一个替换正在进行,右边的VALUE是未定义的。 #define VALUE (VALUE*2) Vladimir Simakov 2020.10.05 13:04 #28632 fxsaber:这种方法可能在任何地方都不起作用。因为有一个替换正在进行,右边的VALUE是未定义的。 而且,改变别人的宏观替代物是邪恶的。如果这些是预定义的环境宏,那就更是如此。在项目的 所有文件都组装完毕后,覆盖的宏最终会在哪里并不重要。最好是定义你自己的_VALUE宏。 fxsaber 2020.10.05 13:08 #28633 Vladimir Simakov: 是的,而且改变别人的宏观替代物是邪恶的。 如果没有这种邪恶,就不会发生这种 情况。 Valeriy Yastremskiy 2020.10.05 13:12 #28634 Vladimir Simakov: 而且,改变别人的宏观替代物是邪恶的。特别是如果它们是预定义的环境宏。在项目的所有文件集合起来后,宏的覆盖最终会在哪里,这并不重要。你最好定义你自己的_VALUE宏。 请问,为什么不能使用将VALUE值赋值给全局变量,然后将其相乘并替换到最终定义中? Vladimir Simakov 2020.10.05 13:36 #28635 Valeriy Yastremskiy: 请问,为什么不能用VALUE赋值给全局变量,并将其相乘后代入最后的定义中? 你可以,但这样就失去了宏替换的意义(替换代码中的值)。所有的希望都寄托在编译器上,它将const类型(顺便说一下,你已经定义了变量类型? 但除此之外,是的,你可以。 #ifdef MACROS const int gValue=2*VALUE; #undef VALUE #define VALUE gValue #endif fxsaber 2020.10.05 13:38 #28636 Vladimir Simakov:但后来,是的,你可以。 用这个就不行了。 void Func( int = VALUE ) {} Vladimir Simakov 2020.10.05 13:50 #28637 fxsaber:它不会对这个人起作用。 对了,我们再一次要求constexpr把它变成这样 constexpr auto x = 100; void Foo(int _x = x) { std::cout << _x<<std::endl; } int main() { Foo(); return 0; } Andrey Khatimlianskii 2020.10.05 13:59 #28638 fxsaber:这种方法可能在任何地方都不起作用。因为有这样的替换在进行,其中右边的VALUE没有被定义。 显然,我根本不了解编译器的工作原理。我想象的是,字符串是按顺序解析的。所以右边没有未定义的值。 #define VALUE 10 // VALUE = 10 #define TMP VALUE // TMP = 10 #undef VALUE // VALUE = EMPTY #define VALUE (TMP*2) // TMP = 10, следовательно VALUE = 20 fxsaber 2020.10.05 14:00 #28639 Andrey Khatimlianskii:显然,我根本不了解编译器的工作原理。我想象的是,字符串是按顺序分析的。所以右边没有未定义的值。 像文本替换一样自上而下地工作。即:"TMP "将被 "VALUE "所取代。 Vladimir Simakov 2020.10.05 14:05 #28640 Andrey Khatimlianskii:显然,我根本不了解编译器的工作原理。我想象的是,字符串是按顺序分析的。所以右边没有未定义的值。 这不是编译器--是预处理程序) #define VALUE (TMP*2) 变成了 #define VALUE (VALUE*2) ,而你的VALUE是未定义的。 1...285728582859286028612862286328642865286628672868286928702871...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么,为什么它不工作呢?
最有可能的是,这种方法在任何地方都不起作用。因为有一个替换正在进行,右边的VALUE是未定义的。
这种方法可能在任何地方都不起作用。因为有一个替换正在进行,右边的VALUE是未定义的。
是的,而且改变别人的宏观替代物是邪恶的。
如果没有这种邪恶,就不会发生这种 情况。
而且,改变别人的宏观替代物是邪恶的。特别是如果它们是预定义的环境宏。在项目的所有文件集合起来后,宏的覆盖最终会在哪里,这并不重要。你最好定义你自己的_VALUE宏。
请问,为什么不能用VALUE赋值给全局变量,并将其相乘后代入最后的定义中?
你可以,但这样就失去了宏替换的意义(替换代码中的值)。所有的希望都寄托在编译器上,它将const类型(顺便说一下,你已经定义了变量类型?
但除此之外,是的,你可以。
但后来,是的,你可以。
用这个就不行了。
它不会对这个人起作用。
这种方法可能在任何地方都不起作用。因为有这样的替换在进行,其中右边的VALUE没有被定义。
显然,我根本不了解编译器的工作原理。我想象的是,字符串是按顺序解析的。所以右边没有未定义的值。
显然,我根本不了解编译器的工作原理。我想象的是,字符串是按顺序分析的。所以右边没有未定义的值。
像文本替换一样自上而下地工作。即:"TMP "将被 "VALUE "所取代。
显然,我根本不了解编译器的工作原理。我想象的是,字符串是按顺序分析的。所以右边没有未定义的值。
这不是编译器--是预处理程序)
变成了
,而你的VALUE是未定义的。