错误、漏洞、问题 - 页 2890 1...288328842885288628872888288928902891289228932894289528962897...3184 新评论 Valeriy Yastremskiy 2020.10.27 16:00 #28891 Roman:如果你需要捕捉这个值的错误,好用333初始化它 )) 这只是一个起始值。 这是正确的,这是一个错误。因此,要么我们在所有情况下对分配未初始化的变量发出警告,要么我们不这样做,而是在所有相同的情况下,在语言中用默认的零来初始化它。 A100 2020.10.27 16:27 #28892 Valeriy Yastremskiy:这是正确的,这是一个错误。事实证明,要么我们在所有情况下对分配未启动 的变量给予警告,要么就不给予警告,而是在所有相同的情况下,在语言内用默认的零来启动它。 只是在上述例子中,你在哪里看到了这样的情况? Roman 2020.10.27 16:33 #28893 A100:只是在上述例子中,你在哪里看到了这样的情况? 关于交易、自动交易系统和策略测试的论坛 虫子,虫子,问题 A100, 2020.10.27 16:11 你必须初始化它,但只能用一个有意义的值。在上面的例子中没有这样的值,所以做法还不错,是唯一可能的做法。否则就会出现双重初始化 int f( int i ) { /*вычисления*/ } void g( int k ) { for ( int i = 0, j; i < k; i = j ) { j = f( i ); /*вычисления*/ } } A100 2020.10.27 16:38 #28894 Roman: 那么未初始化的变量的赋值 在哪里呢?哪个变量是未初始化的?它被分配给谁?你强调的是:j从=到左边的j=,而不是到右边的=j,也就是说,在它本身被赋值 之前,它没有被赋给任何人 Valeriy Yastremskiy 2020.10.27 16:42 #28895 A100:只是在上述例子中,你在哪里看到了这样的情况? 是的,我忘了,在所有情况下,未初始化的变量都有一个赋值,而不是反过来。也许编译器是自上而下的排查,在这种情况下,是的,赋值在底部,反之在顶部。还有一个关于可能向非初始化的变量赋值的警告。 Roman 2020.10.27 16:46 #28896 A100:那么未初始化的变量的赋值 在哪里呢?哪个变量未被初始化? 它被分配给了谁?你所强调的是j=,而不是=j 在循环体 中向一个未初始化的变量赋值。在第一次迭代之前,j还没有被初始化。,在第一次迭代通过后,它将被初始化。 循环主体首先被执行,然后是增量范围。你已经用i = j代替了它 Valeriy Yastremskiy 2020.10.27 16:49 #28897 Roman:赋值给一个未初始化的变量,在函数体内。在第一次迭代之前,j还没有被初始化。,它将在第一次迭代之后被初始化。 首先执行的是函数主体,然后是增量区。你已经用i = j代替了它 不,这是正确的,在第一次迭代时不推断j,启动时只是j=f(i),在第二次迭代时只会是i=j,我想编译器是从上到下解析的,并给出警告。 Roman 2020.10.27 16:52 #28898 Valeriy Yastremskiy:不,是这样的,变量j在第一次迭代时没有被初始化,只是j=f(i),在第二次迭代时只有i=j,我想编译器从上到下进行解析,并给出警告。 是的,但是在第一次迭代之前,j变量还没有被初始化,这就是编译器在发誓的内容。 A100 2020.10.27 16:53 #28899 Valeriy Yastremskiy:是的,这是错的,在所有未初始化变量的情况下,都有一个赋值,而不是相反。也许编译器是自上而下的,所以是的,赋值是在底部,反之是在顶部。还有一个关于可能 向非初始化的变量赋值的警告。 这可能是在编译器没有客观信息的情况下。 void f( int& i ) { /*вычисления*/ } void OnStart() { int i; f( i ); int j = i; //нормально ??? а если i не инициализирована? printf("%d",j); } 也就是说,也许f()正在初始化i,也许没有。在这里,C++编译器给出了一个警告,而MQL编译器不知为何没有。 Valeriy Yastremskiy 2020.10.27 17:02 #28900 A100:这可能是在编译器客观上没有信息的时候。也就是说,也许f()有i初始化,也许没有。而这里C++编译器给出了一个警告,MQL则没有。 我不知道他们说什么,我认为是一个更简单的编译器。从上到下解析布局语法,找出明显的语法错误,不尊重类型和使用错误的变量。在第二个例子中,当初始化被放下的时候,并没有产生一个警告。尽管程序的执行是相同的。 1...288328842885288628872888288928902891289228932894289528962897...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你需要捕捉这个值的错误,好用333初始化它 ))
这只是一个起始值。
这是正确的,这是一个错误。因此,要么我们在所有情况下对分配未初始化的变量发出警告,要么我们不这样做,而是在所有相同的情况下,在语言中用默认的零来初始化它。
这是正确的,这是一个错误。事实证明,要么我们在所有情况下对分配未启动 的变量给予警告,要么就不给予警告,而是在所有相同的情况下,在语言内用默认的零来启动它。
只是在上述例子中,你在哪里看到了这样的情况?
只是在上述例子中,你在哪里看到了这样的情况?
关于交易、自动交易系统和策略测试的论坛
虫子,虫子,问题
A100, 2020.10.27 16:11
你必须初始化它,但只能用一个有意义的值。在上面的例子中没有这样的值,所以做法还不错,是唯一可能的做法。否则就会出现双重初始化
那么未初始化的变量的赋值 在哪里呢?哪个变量是未初始化的?它被分配给谁?你强调的是:j从=到左边的j=,而不是到右边的=j,也就是说,在它本身被赋值 之前,它没有被赋给任何人
只是在上述例子中,你在哪里看到了这样的情况?
是的,我忘了,在所有情况下,未初始化的变量都有一个赋值,而不是反过来。也许编译器是自上而下的排查,在这种情况下,是的,赋值在底部,反之在顶部。还有一个关于可能向非初始化的变量赋值的警告。
那么未初始化的变量的赋值 在哪里呢?哪个变量未被初始化? 它被分配给了谁?你所强调的是j=,而不是=j
在循环体 中向一个未初始化的变量赋值。在第一次迭代之前,j还没有被初始化。
,在第一次迭代通过后,它将被初始化。
循环主体首先被执行,然后是增量范围。你已经用i = j代替了它
赋值给一个未初始化的变量,在函数体内。在第一次迭代之前,j还没有被初始化。
,它将在第一次迭代之后被初始化。
首先执行的是函数主体,然后是增量区。你已经用i = j代替了它
不,这是正确的,在第一次迭代时不推断j,启动时只是j=f(i),在第二次迭代时只会是i=j,我想编译器是从上到下解析的,并给出警告。
不,是这样的,变量j在第一次迭代时没有被初始化,只是j=f(i),在第二次迭代时只有i=j,我想编译器从上到下进行解析,并给出警告。
是的,但是在第一次迭代之前,j变量还没有被初始化,这就是编译器在发誓的内容。
是的,这是错的,在所有未初始化变量的情况下,都有一个赋值,而不是相反。也许编译器是自上而下的,所以是的,赋值是在底部,反之是在顶部。还有一个关于可能 向非初始化的变量赋值的警告。
这可能是在编译器没有客观信息的情况下。
也就是说,也许f()正在初始化i,也许没有。在这里,C++编译器给出了一个警告,而MQL编译器不知为何没有。
这可能是在编译器客观上没有信息的时候。
也就是说,也许f()有i初始化,也许没有。而这里C++编译器给出了一个警告,MQL则没有。
我不知道他们说什么,我认为是一个更简单的编译器。从上到下解析布局语法,找出明显的语法错误,不尊重类型和使用错误的变量。在第二个例子中,当初始化被放下的时候,并没有产生一个警告。尽管程序的执行是相同的。