Erreurs, bugs, questions - page 2762

 
Aleksey Mavrin:

Vous allez rire, mais même cela fonctionne sans avertissement.

vous allez rire aussi, mais c'est le chemin vers l'UB et le moyen d'obtenir le bug délicat sur les prochaines constructions :-)

int foo=-1;

uchar bar=(uchar)foo; // чему должен быть равен bar ?

 
Igor Makanu:

vérifié :

OK, fonctionne sans aucun avertissement du compilateur

Merci

Pourquoi l'appel ArrayInitialize est-il nécessaire dans ce cas ? Pourquoi ne pas simplement écrire uchar uc[16] = {0xFF} ; ?

ArrayInitialize a du sens pour les tableaux distribués dynamiquement, alors qu'ici la taille est censée être connue au moment de la description.

 
Aleksey Mavrin:

Vous allez rire, mais même cela fonctionne sans aucun avertissement.

ce n'est pas drôle, ce n'est pas une initialisation correcte, que vous ne comprenez peut-être pas pourquoi vous avez fait

Il est clair que l'octet le plus significatif sera coupé lors de la conversion en uchar.


Stanislav Korotky:

Pourquoi ai-je besoin de l'appel ArrayInitialize dans ce cas ? Pourquoi ne pas simplement écrire uchar uc[16] = {0xFF} ; ?

ArrayInitialize a du sens pour les tableaux distribués dynamiquement et ici la taille est supposée être connue au moment de la description.

ne fonctionne pas

Si on le désimprime, le premier élément sera 255 et les autres 0, 0, 0, ...

 
Igor Makanu:

OK, fonctionne sans aucun avertissement du compilateur

sans fantôme est normalement comme ceci

ArrayInitialize(uc, '\xFF');
UPD non, même avertissement, un tel littéral est de type ushort
 
Encore une fois, sur un pied d'égalité...
void OnStart(){
   uchar uc[16];
   ArrayInitialize (uc, -1);
   ArrayPrint(uc);  // 255 255 255 255 255 ...
}
 
Sergey Dzyublik :
Encore une fois, sur un pied d'égalité...
Quel est le problème ?
 
Sergey Dzyublik:
Une fois de plus sur place...

Je suis totalement confus.)

Il émet un avertissement pour les constantes de 128 et 0xFF, mais pas pour les variables int ayant les mêmes valeurs.

De plus, il ne prévient pas non plus de la constante -1 int. Y a-t-il une logique dans tout cela ?

s.s. Je suppose que c'est compréhensible avec -1, il est réduit à toute valeur non signée par max selon les règles.
 
Andrei Trukhanovich:

sans un fantôme comme celui-là.

UPD non, également un avertissement, un tel littéral est de type ushort
'\xFF'

? ? wow... en 4 rouleaux (il est ouvert à l'occasion).

void OnStart()
  {
ushort foo='\xFF';

  }

PS/ quand, à l'occasion, quelqu'un a un site web, donnez-lui une tape sur les doigts.

 
Dans les builds 2460 et 2470 lorsque vous supprimez toutes les transactions et désactivez le rafraîchissement automatique et ouvrez un nouvel ordre, ils réapparaissent tous avant que cela ne se produise et une partie des conseillers et des indicateurs écrit err 400 et err 401 bien qu'ils compilent sans erreur mais ne veulent pas fonctionner......
 

Pourquoi le résultat du script est-il de 1-2 secondes dans le rapport, mais de plus d'une minute ?

#include <(MyLib)\CGraphicObjects\CMyButton.mqh>CMyButton but;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("Начали");
// ===================================================================
   int total = 10000;
   for(int i = 0; i < total; i++)
      but.Create("Push" + (string)i, 32, 32, 30, 30);
// ===================================================================
   ulong mass[100];
   ArrayInitialize(mass, 0);
// ===================================================================
   for(int k = 0; k < 100; k++)
     {

      ulong  start = GetMicrosecondCount();

      for(int i = 0; i < total; i++)
         color col = but.ColorBG();

      mass[k] = GetMicrosecondCount() - start;
     }
// ===================================================================
   Print("Массив");
   ulong rez = 0;
   for(int i = 0; i < 100; i++)
      rez += mass[i];

   Print("Старый способ Итог: " + IntegerToString(rez / 100)+" Sec "+ IntegerToString(rez / 100/1000000));

  }
//+------------------------------------------------------------------+

Le script a fonctionné et du début au déchargement, cela prend environ une minute ou plus.

Mais le script s'entête à écrire qu'il a fonctionné pendant 1 à 2 secondes, qu'est-ce qui peut ralentir le PC à ce point ?

2020.06.01 11:34:26.680 Vitesse de test (EURUSD,M15) Démarrage

2020.06.01 11:37:34.067 Vitesse de la Teste (EURUSD,M15)

2020.06.01 11:37:34.067 Vitesse de test (EURUSD,M15) Chemin le plus ancien Total : 1870971ms Sec 1

2020.06.01 11:39:32.283 Vitesse de la Teste (EURUSD,M15)

2020.06.01 11:42:24.664 Vitesse de la Teste (EURUSD,M15)

2020.06.01 11:42:24.664 Vitesse de test (EURUSD,M15) Ancienne méthode Totaux : 1652839ms Sec 1