Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 427

 
Artyom Trishkin:
Et lisez combien de fois une variable statique est initialisée. Et la question elle-même disparaîtra pour son absurdité ;)

Alors comment comprendre ceci : les variables locales déclarées avec le mot clé static conservent leurs valeurs pendant toute la durée de vie de la fonction. Chaque fois que la fonction est appelée à nouveau, ces variables locales contiennent les valeurs qu'elles avaient lors de l'appel précédent. Une variable déclarée dans une fonction définie par l'utilisateur n'est-elle pas une variable locale ?

 
Alekseu Fedotov:

Sur la deuxième question,

si le premier tic n'attrape pas, le second le fera.

Renvoie l'heure d'ouverture du bar. Il en sera de même dans tout le bar.
 
novichok2018:

Alors comment comprendre ceci : les variables locales déclarées avec le mot clé static conservent leurs valeurs pendant toute la durée de vie de la fonction. Chaque fois que la fonction est appelée à nouveau, ces variables locales contiennent les valeurs qu'elles avaient lors de l'appel précédent. Une variable déclarée dans une fonction définie par l'utilisateur n'est-elle pas une variable locale ?

Le modificateur static la rend statique, et elle est stockée en mémoire pour les variables statiques, et non locales.
 
Artyom Trishkin:
Renvoie l'heure d'ouverture du bar. Il en sera de même dans tout le bar.

Je l'ai juste ici. Merci.

 
Artyom Trishkin:
Le modificateur static la rend statique et elle est déjà stockée en mémoire pour les variables statiques, pas pour les variables locales.

C'est là que je ne comprends pas. A mon avis, peu importe où elle est stockée, par code nous remettons la valeur de la variable à zéro à chaque fois que l'on accède à la fonction. Pour quoi faire ?

 
novichok2018:

C'est là que je ne comprends pas. A mon avis, peu importe où elle est stockée, par code nous remettons la valeur de la variable à zéro à chaque fois que l'on accède à la fonction. Pour quoi faire ?

Pour le premier lancement - quand vous le déclarez. Après cela, c'est à vous de contrôler son contenu.
 
Artyom Trishkin:
Pour le premier lancement - à la déclaration. En outre, vous contrôlez vous-même son contenu.

Or, à mon avis, ce n'est pas le cas : le code est lu ligne par ligne à chaque fois et à chaque fois il atteint zéro, et à la première exécution, même s'il n'y a pas d'initialisation, la variable prendrait une valeur nulle. Ainsi, la chaîne de temps statique New_Time=0 ; oblige le programme à faire un travail inutile.

 
novichok2018:

Or, à mon avis, ce n'est pas le cas : le code est lu ligne par ligne à chaque fois et à chaque fois il atteint zéro, et à la première exécution, même s'il n'y a pas d'initialisation, la variable prendrait une valeur nulle. Ainsi, la chaîne de temps statique New_Time=0 ; oblige le programme à faire un travail inutile.

On vous dit "non", vous dites "oui"...
Il suffit d'imprimer la valeur de la variable dans le journal et de regarder. Pourquoi vous battez-vous quand on vous explique les choses les plus simples ?
Vous pouvez continuer sans moi jusqu'à ce que vous le vérifiiez vous-même.
 
Artyom Trishkin:
Tu dis non, tu dis oui...
Il suffit d'imprimer la valeur de la variable dans le journal de bord et de voir. Pourquoi s'embêter quand on vous explique les choses les plus simples ?
Continuez sans moi jusqu'à ce que vous ayez vérifié vous-même.
Vous n'avez pas à être offensé. Mais apparemment, les programmeurs lisent le texte différemment. J'ai toujours pensé que si l'on dit "égaliser à zéro" dans un programme, l'ordinateur doit égaliser à zéro, que ce soit au démarrage ou lors de références répétées à une ligne de code. Et il n'est pas nécessaire de consulter un quelconque journal pour prouver que l'initialisation zéro n'est pas nécessaire, il suffit de la supprimer : static datetime New_Time ; produit absolument les mêmes résultats que static datetime New_Time=0 ; je ne sais pas combien le fonctionnement du programme est plus rapide, j'admets que ce n'est pas du tout significatif, mais cela supprime quand même le "geste inutile".
 
novichok2018:
Ne soyez pas offensé. Mais les programmeurs lisent évidemment le texte différemment. J'ai toujours pensé que s'il est dit "égaler à zéro" dans un programme, l'ordinateur doit égaler zéro, que ce soit au lancement ou lors d'une référence récurrente à une ligne de code. Et il n'est pas nécessaire de consulter une revue pour prouver que l'initialisation zéro est inutile, il suffit de la supprimer : static datetime New_Time ; produit absolument les mêmes résultats que static datetime New_Time=0 ; je ne sais pas combien le fonctionnement du programme est plus rapide, j'admets que ce n'est pas du tout significatif, mais cela supprime quand même le "geste inutile".
Je ne suis pas offensé par l'entêtement. Pourquoi ?
Et les variables doivent être initialisées explicitement. Vous verrez un jour l'importance de l'initialisation. En attendant, vous pouvez jeter tout ce qui se trouve entre crochets.