Erreurs, bugs, questions - page 2502

 
Alexey Viktorov:

De plus, cela dépend de la séquence des champs.

vérifié, cela dépend :

struct A pack(16)
{
  double  x;
  short   j;
  int     b;
};
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(sizeof(A)); // 16
  }
//+------------------------------------------------------------------+
Votre exemple donnesizeof(A) = 24
 
fxsaber:

C'est ainsi que cette discussion a commencé. Il s'avère que ce n'est pas du tout comme ça.

Oui, j'ai fait une erreur en décrivant l'algorithme d'alignement et j'ai donc pu causer encore plus de confusion.

Donc,

pack est un mécanisme de compatibilité avec les dlls externes. En particulier, il est analogue au #pragma pack de c++ et devrait donc fonctionner de la même manière.

autres exemples avec dimensions (pour le pack 4)

char -> 1

court -> 2

int -> 4

long -> 8

char, short -> 4

char, int -> 8

char, long -> 12 (16 pour pack(8))

court, char -> 4

long, char -> 12

long, char, short -> 12

long, char, char, char -> 12

long, char, int -> 16

long, char, int, char -> 20

le studio (et probablement partout ailleurs) utilise par défaut pack(8)
 
TheXpert:

Merci, je vois.

 
Alexey Viktorov:

Tout fonctionne à mon avis. Puisque dans votre exemple il n'y a qu'un seul type dans la structure, il n'y a pas d'intérêt à l'alignement.

Vous vous trompez, il ne fonctionne pas correctement. C'est logique. C'est un bug. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

 

Bonjour. Pouvez-vous me dire s'il existe des touches de raccourci pour le trading dans MT5 ? Je ne les ai pas trouvés dans le manuel. Sinon, y a-t-il un moyen de l'implémenter ? Par exemple, j'ai appuyé sur une touche et un ordre s'est ouvert, y a-t-il quelque chose de similaire ?

 
Vict:

Faux, ça ne marche pas bien. C'est logique. C'est un bug. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

Alors, quel est le problème ?

struct A pack(4)
{
  short j;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 4
   return;
}

Vous déclarez un tableau de deux éléments de deux octets chacun et obtenez 4 octets comme il se doit. Où est l'insecte ? Quoi ?

Ceci.

struct A pack(4)
{
  short j;
  int   b;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 16
   return;
}

Le tableau est aligné sur 4 et 2 éléments prendront 2*8 octets.

 
astronom55:

Bonjour. Pouvez-vous me dire s'il existe des touches de raccourci pour le trading dans MT5 ? Je ne les ai pas trouvés dans le manuel. Si ce n'est pas le cas, y a-t-il un moyen de l'implémenter ? Par exemple, j'ai appuyé sur une touche et un ordre s'est ouvert, y a-t-il quelque chose de similaire ?

Le chat a-t-il marché sur le clavier et échangé pour vous ?

Faites-le vous-même - ce n'est pas difficile.

 
astronom55:

Bonjour. Pouvez-vous me dire s'il existe des touches de raccourci pour le trading dans MT5 ? Je ne les ai pas trouvés dans le manuel. Si ce n'est pas le cas, y a-t-il un moyen de l'implémenter ? Par exemple, j'ai appuyé sur une touche et un ordre s'est ouvert, y a-t-il quelque chose de similaire ?

Aide sur le terminal :Touches de raccourci - Utilisateurs avancés - Mise en route


Si vous avez besoin d'une action "Il suffit de cliquer une fois et une position est ouverte" - alors une combinaison de touches doit être assignée à un script ou à un conseiller expert dans le terminal (le script ou le conseiller expert doit être téléchargé, écrit ou commandé).

Горячие клавиши - Для продвинутых пользователей - MetaTrader 5
Горячие клавиши - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
Горячие клавиши — это клавиши и их комбинации, которые позволяют быстро выполнять различные команды без обращения к меню и панелям управления. Существует возможность назначать горячие клавиши для вызова любого элемента окна "Навигатор", за исключением элементов группы "Счета". Чтобы назначить сочетание клавиш элементу, выполните команду...
 
Artyom Trishkin:

Le chat a-t-il marché sur le clavier et fait un échange pour vous ?

Faites-le vous-même - ce n'est pas difficile.

Je ne sais pas comment faire. Je n'ai pas trouvé de script comme ça.
 
Alexey Viktorov:

Alors, quel est le problème ?

Vous déclarez un tableau de deux éléments de deux octets chacun et obtenez 4 octets comme il se doit. Où est l'insecte ? Qu'est-ce que c'est ?

C'est ça.

Vous alignez 4 et 2 éléments qui occuperont 2*8 octets.

Désolé, mais si vous écrivez ça, vous ne comprenez pas le sujet.

Analogues aux croix :

#include <iostream>
struct alignas(4) A
{
  short j;
};

int main()
{
   A q[2];
   std::cout << sizeof(q) << std::endl; // 8
   return 0;
}

L'erreur n'est probablement pas ici ?

Raison: