Erreurs, bugs, questions - page 2888

 
C'est un avertissement douteux :
void OnStart()
{
    for ( int i = 0, j; i < 10; i = j ) //(1) Warning: possible use of uninitialized variable 'j'
    {
        j = i+1;
    }
}

mais c'est bien :

void OnStart()
{
    for ( int i = 0, j; i < 10;       ) //(2) нормально
    {
        j = i+1;
                                i = j;
    }
}

quelle est la différence fondamentale ?

 
A100:
C'est un avertissement plutôt douteux :

mais c'est bien :

quelle est la différence fondamentale ?

Avertissement correct. La variable j n'est pas initialisée avant sa première utilisation, lorsque la variable i se voit attribuer une valeur de j.

Et dans la deuxième variante, la variable j se voit attribuer la valeur i+1 et seulement alors i = j

C'est ainsi que cela devrait être sans avertissement, mais cela n'a pas été testé...

void OnStart()
{
    for ( int i = 0, j = 0; i < 10; i = j )
    {
        j = i+1;
    }
}
 
Alexey Viktorov:

Avertissement correct.

pour les surdoués alternatifs, il s'agit de cycles identiques
 
TheXpert:
pour les surdoués alternatifs, il s'agit de boucles identiques

Alors quoi, cette identité des boucles permet l'utilisation de variables non identifiées ?

 
Alexey Viktorov:

Alors quoi, cette identité des boucles permet l'utilisation de variables non identifiées ?

Si les boucles sont identiques, alors le comportement du compilateur devrait être le même, et il est différent. C'est là que réside l'erreur. Vous avez expliqué pourquoi il y a un avertissement dans le cas (1), alors expliquez pourquoi il n'y en a pas dans le cas (2) ? Qu'est-ce qui a changé en principe ? Et puis, si une variable non initialisée est utilisée, pourquoi le résultat final est-il correct lors de l'exécution du code ?

Il existe une telle science - la logique. Si A et B sont identiques et que A est rouge, alors B doit aussi être rouge, et non vert.

 
A100:

Si les boucles sont les mêmes, alors le comportement du compilateur devrait être le même, et il est différent. C'est là que réside l'erreur. Vous avez expliqué pourquoi il y a un avertissement dans le cas (1), puis vous expliquez pourquoi il n'y en a pas dans le cas (2) ? Qu'est-ce qui a changé en principe ? Et puis, si une variable non initialisée est utilisée, pourquoi le résultat final est-il correct lors de l'exécution du code ?

Il existe une telle science - la logique. Si A et B sont identiques et que A est rouge, B doit aussi être rouge, et non vert.

Il n'y a pas de numéro aléatoire. Il n'y a rien là.
MQ l'a également corrigé ;)

void OnStart()
{
   int val;
   
   Print(val);
   Print(IntegerToString(val));
}
 
Roman:

Iln'y a pas de numéro aléatoire. Il y a un zéro là.
MQ a corrigé cela aussi ;)

D'abord, il faut vérifier - ensuite "conneries".

void OnStart()
{
        for ( int i = 0, j; i < 10; i++ )
        {
                Print( j );
                break;
        }
}

Résultat : -2052256859


 
A100:

Vous devez d'abord vérifier - puis "dire des bêtises".

Résultat : -2052256859


void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( j );                
   }
}
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0

C'est peut-être parce que j'ai un terminal de test installé sur VirtualBox
. De plus, le compilateur ne prévient pas que la variable n'est pas initialisée.

Mais il avertit comme ceci

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
Probablement parce que j'ai le terminal de test installé sur VirtualBox

Vous avez un nombre aléatoire 0, j'ai 540016640.

2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640

mais ce sont toujours des nombres aléatoires.

 
A100:

Vous avez un nombre aléatoire 0, j'ai 540016640.

mais ce sont toujours des nombres aléatoires.

Je croyais que le MQ était annulé.