Características del lenguaje mql5, sutilezas y técnicas - página 121

 
TheXpert:

Entonces no lo entiendo.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Peculiaridades de mql5, consejos y trucos

Alexey Navoykov, 2019.01.14 16:35

Si lo necesita, puede declarar void OnTick(); al principio. Pero en general, el orden de declaración de las funciones es una forma adicional de controlar la corrección del código. Por ejemplo, si en algún plug-in sucede la llamada OnTick() o, peor aún, OnInit(), ¿es bueno? Las bibliotecas no deben ver su código de trabajo.
 
fxsaber:

Entonces no lo entiendo

Las declaraciones forward son sólo para las clases y estructuras, no para las funciones.

 
fxsaber:

La cuestión es que si las funciones que vas a utilizar están especificadas en el inlude, tienes que escribirlas según la sugerencia, si el inlude está abajo.

¿Cuál es el problema de insertar un inluder antes?

Puede ser un inconveniente para un archivo (la función con el cuerpo debe ser antes de la llamada), pero si la función en mqh - ¿cuál es el problema para insertar el inlude al principio?

 
TheXpert:

La declaración forward es sólo para clases y estructuras, no para funciones.

Es genial que lo hayas aclarado.

Andrey Khatimlianskii:

¿Cuál es el problema de insertar un inluder antes?

Puede ser un inconveniente para un archivo único (una función con un cuerpo necesariamente antes de la llamada), pero si la función está en mqh - ¿cuál es el problema de insertar un inline al principio?

Algunas construcciones con macros han requerido a veces un inlude en la última línea. No te voy a dar un ejemplo concreto, me los he encontrado en la práctica muchas veces.

 
TheXpert:

Las declaraciones forward son sólo para las clases y estructuras, no para las funciones.

No, yo también estoy equivocado. Una función tiene una declaración y una definición.
 
fxsaber:

Algunas construcciones con macros a veces requerían un inlude en la última línea. No te voy a dar un ejemplo concreto, me los he encontrado muchas veces en la práctica.

Bueno, esto es algo bastante exótico. No creo que merezca la pena sacrificar la corrección arquitectónica por las macros individuales.

En cualquier caso, el código del programa debe ejecutarse exactamente según el algoritmo previsto. El acceso a una variable antes de su inicialización no tiene sentido. Esto no debería compilar.

 

Por cierto, si un inlude utiliza algunas funciones que no están allí, deben declararse allí de todos modos. Al igual que las clases y las variables externas. Por lo demás, es una muleta, no un inludio.

En consecuencia, el enchufe no debe depender del lugar donde se enchufe.

 
Alexey Navoykov:
Por cierto, si se utilizan algunas funciones en el inlude, que no están allí, deben declararse allí de todos modos. Al igual que las clases y las variables externas. De lo contrario, no es un inludio, sino una muleta.

¿Qué crees que es un inludio? Para mí, es sólo un trozo de texto, asignado a un archivo separado. Y se ignora su reintroducción en la fuente. Nada más.

 
fxsaber:

¿Qué crees que es un inludio? Para mí, es sólo un trozo de texto, asignado a un archivo separado. Y se ignora su reintroducción en la fuente. Nada más.

Creo que debería ser un código independiente y autónomo. Tiene más sentido, y es fácil de controlar, y hacer comprobaciones de sintaxis independientes en este código. Pero si todo está en diferentes archivos y no está claro desde dónde se llama, es un caos.

 
Alexey Navoykov:

Bueno, creo que debería ser un código independiente. Tiene más sentido y es más fácil controlar y realizar una comprobación sintáctica independiente de este código. Y si todo está disperso por los archivos y no está claro qué se llama desde dónde - es un caos.

He publicado ejemplos de mi código. No he oído ningún comentario sobre el caos, ni siquiera para los incudes que no compilan.