外部和输入之间的区别 - 页 5

 
Alexey Navoykov:

想象一下,这些初始化是在不同的包含文件中完成的。然后,最终的结果将取决于这些文件被包含的顺序。

好吧--即使是这些外部设备的如此明显的bug

所以我写道,它们没有任何意义,它们只是为了与旧代码兼容--用input代替extern,并纠正错误......目的不明确....外延是没有意义的--查一查

 
Alexey Navoykov:

不幸的是,MQL5中的外部变量的实现还没有最终确定,这就是为什么我不建议使用它--它可能会引起问题。 我是指缺乏对这些变量的强制性一次性 初始化的控制。

例如,你可以这样写。

想象一下,这些初始化是在不同的插件中进行的。然后,最终的结果将取决于这些文件被包含的顺序。

或者我们可以像这样写(可执行文件)。

这里我们根本没有初始化这个外部变量,但也没有错误。

因此,我们无法控制相同的变量是否在其他文件中被定义。 你可以不小心改变它的名字,但程序会像什么都没发生一样被编译,尽管在其他文件中我们有一个不同名字的变量。

总而言之,它不适合任何地方。这就是为什么最好使用函数而不是外部变量。 它们保证只有一个定义,不多也不少。

采用这种方法,你根本就不应该使用电脑。因为如果你闭上眼睛,在键盘上戳,你会得到胡言乱语。

在extern中,真正的问题发生在你试图从输入中做出extern的时候。我不记得细节了,那是很久以前的事了。结果,我完全拒绝了extern,在include文件中声明了一个简单的变量,并通过函数调用 在EA inite中设置其值。

 
Igor Makanu:

你去那里 - 即使是这些外部设备的明显错误

这就是为什么我写道,它们没有任何意义,它们只是为了与旧代码兼容--用input替换extern,并纠正错误......否则,帮助中说......目的不明确....外部没有任何意义--无论你如何努力寻找。

有一种感觉。在MT5中,在包含的文件中,extern根本就没有输入。

 
Dmitry Fedoseev:

这是有道理的。在MT5中,include文件中的extern根本就不是一个输入。

你为什么要在include文件中添加externs?

我不知道现代世界的程序写作 是怎么回事,但我学会了用程序化风格写作,然后我开始使用OOP。 第一种和第二种风格意味着每个逻辑单元在转移到另一个程序时必须是完整的功能,也就是说,一个函数写好了--它的描述(头)包含了它使用的所有参数--它不需要iprouts--你把这个函数剪切并粘贴到另一个文件,它就原样 "移动 "了,类也是这样。

而iprouts本身应该只创建用户界面,它们应该总是在主文件中描述。


在include文件中使用extern,我认为这是很难追踪到bug的方法,上面的@Alexey Navoykov 展示了它是如何发生的,不幸的是一半以上的变量名都有一个字母相同的名字,最大的区别在于使用大写/小写字母,例如MagicNumber或Magic--如果你看KB,那么其他每个变量,所以在你的方法是一个威胁,在其变量中 "遮盖 "extern,幸好现在很少有人使用ecterps。

 
Igor Makanu:

为什么要在include文件中添加iprtu's?

我不知道现代世界写程序 是怎么回事,但我学会了用程序式写程序,然后开始使用OOP,无论是第一种还是第二种风格,都暗示着每个逻辑单元在转移到另一个程序时必须是全功能的,即你写了一个函数--在它的描述中(标题中)有它使用的所有参数--它不需要iprouts--剪切这个函数并插入到另一个文件,它 "移动 "时就是这样--类也是这样。

而iprouts本身应该只创建用户界面,它们应该总是在主文件中描述。

并非如此。在include文件中添加externs。这样,在include文件中,你可以使用主文件中声明的输入。

顺便说一下,在你开始使用include文件时,几乎总是需要它。

 
Dmitry Fedoseev:

不是这样的。在include文件中添加externs。这样,在include文件中,你可以使用主文件中声明的输入。

顺便说一句,这几乎是你一开始使用include文件时就需要的东西。

举例说明为什么要使用extern

 
Igor Makanu:

举例说明使用extern的适当性

它已经存在 了一段时间了。

 
Dmitry Fedoseev:

如果你采取这种方法,你根本就不应该使用电脑。因为如果你闭上眼睛,在键盘上戳一下,你就会得到垃圾。

当然,你会得到那些垃圾,但它几乎不会被编译。编译器的任务不是要编译垃圾。而在这种情况下,它没有做到这一点。
 
Dmitry Fedoseev:

在这里 已经有一段时间了。

这就是我所说的。

你的例子是产生了隐藏的bug,变量名x经常被使用....上面写道

我认为它应该是这样的。

extern int x;

int z()
  {
   static int x;
   x=122;
   return x;
  }
 
Igor Makanu:

这就是我所说的。

你的例子是催生隐藏的虫子,变量名称x经常被使用....上面写道

我认为它应该是这样的。

不可能。变量x不仅在一个函数中可用,而且在所有函数中都可用。甚至更多--它应该在主文件以及所有连接的文件中都可以使用。