错误、漏洞、问题 - 页 1332

 
Alexey Navoykov:
你的建议在实践中是没有意义的。 没有人故意 给出相同的名字。 本地函数的代码有自己独立的生活,而外部程序有自己的生活。 而且外部变量的名字可以随着时间的推移而改变,新的外部变量也可以被添加。如果在那之后,数百个函数中突然有一个有相同名字的局部变量,你认为我们应该给全局变量 重新命名? 你不应该为开发者的错误寻找借口。

我不是在为开发者的错误寻找借口,但这个错误很容易规避,在一个项目中工作时不要使用负责输入参数的相同变量名。只要改变输入参数中的名称就可以了,我怀疑你的输入参数中有几百个变量,需要编辑所有的代码:)代码的主要部分通常写在软件的入口处,它没有那么大,一切都由函数(方法)调用 完成。而对于函数(方法)来说,在函数的输入参数中传递变量的名称是没有区别的。

当然,如果你写的代码中的函数使用了全局变量,那么当然,你将不得不改变很多东西,但这种代码的编写完全没有远见,它真的很难现代化。

虽然如果你用消费者的观点看开发商(MetaQuotes),当然,你想一次得到很多东西 :) 我想在一个跨平台的终端工作,但对这个要求的答案将是一个--要么使用你所拥有的,要么通过它 :)

 
Konstantin Karpov:

只要改变输入参数中的名称...

你有一种轻描淡写的看法。就这样改吧......然后会有一些其他的函数加入到本地变量名 匹配的代码中,你必须再改一次,对吗? 一个外部变量名不仅仅是一串字母,它有特定的含义。有时你必须努力思考,为它找到一个简明扼要的名字,你说--改变它。 而且,如果改变名字,这个参数的所有预设设置,以及测试器和优化器的设置都将丢失。

假设你从外面的某个地方插入了一些函数,也许它甚至不是你写的,所以那里的局部变量 名绝对可以是任何。

 
Alexey Navoykov:

你有一种轻描淡写的看法。然后在代码中添加了一些其他的函数,其中的局部变量 有相同的名字,你必须再次改变它,对吗? 外部变量的名字不只是一堆字母,它有特定的含义。有时候,你必须努力思考,为它找到一个简洁明了的名字,你说的是--改变它。 而且,如果改变名字,这个参数的所有预设设置,以及测试器和优化器的设置都将丢失。

假设你从外面的某个地方插入了一些函数,也许它甚至不是你写的,所以那里的局部变量 的名字绝对可以是任何的。

按你的想法去做,但看起来你没有写过任何大项目。

我看我的函数定义是没有意义的,因为我在全局和局部变量名的声明风格上有明显的区别。因此,我没有遇到诸如全局和局部变量名称重合的问题。最主要的是,函数在没有碰撞的情况下完成其逻辑。在你的案例中,有一个很大的问题,如果你把全局变量的名字 和局部变量的名字重合在一起,就会出现意外,你已经开始清理了。

例如,在本地变量名称中多加一个_,例如_iCount。在这种情况下,你永远不会有变量名称的问题,因为你将实现你第二次试图向我解释的东西--变量生活在本地范围内,在那里它们被创建。而在这种情况下,没有全局变量就不会在名称上引入歧义。在这一点上,让我们结束我们的讨论。

 

回到我之前的帖子。MT4/845, Windows7/64位, 脚本。

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("AA: d3 = ",d3);
   Print("BB: d3 = ",DoubleToString(d3));
   Print("CC: d3 = ",DoubleToString(d3,8));
   Print("DD: d3 = ",DoubleToString(d3,9));
   Print("EE: d3 = ",DoubleToString(d3,10));
}

结果。


管理,在DoubleToString 中加入该函数将浮点数 四舍五入到指定精度

 

不要用同样的方式命名局部变量和输入变量,这是一个好主意

 
Комбинатор:

不要用同样的方式命名局部变量和输入变量,这是一个好主意

从好的方面来说,是的,但有时当你修复别人的代码,将你自己的库连接到它,并...咣当...
 

试着在附件中的ME中延续这一行,不要有空格

附加的文件:
comment.mq5  1 kb
 
在讨论一个问题时,是否可以链接到市场上的一个产品?或者这是否会被认为是广告而被禁止?
 
Yousufkhodja Sultonov:
在讨论一个问题时,是否可以链接到市场上的一个产品?或者这是否会被认为是广告而被禁止?
每个产品都有两个标签:讨论(为那些刚刚考虑购买的人)和评论(为已经购买的人)。这是对产品进行讨论的地方。
 

运算符后有问题的编译结果?:

int f()
{
        int array[];
        return ( false ? array : array );
}
void OnStart()
{
        Print( f() );
}
// 0 error(s), 0 warning(s)
结果:65618(怎么会这样?),应该有一个编译时错误