Cualquier pregunta de un PROFI a un SUPER PROFI - 1. - página 3

 
Santa simplicidad (c) Jan Hus
 
Sorento:
Santa simplicidad (c) Jan Hus

¿Qué quieres decir?
 
drknn:

¿Qué quieres decir?

No es tan sencillo.

ahora dentro de la función - trabajar con la variable pasada.

Como nos enseñan las matemáticas, si pasas una pseudovariable por la dirección, todas las maravillas que hay en ella desaparecen.

Pero si el conjunto de direcciones se alinea con las constantes, todo será diferente.

0 se convierte en 1 y viceversa.

;)

 
¿Por qué se necesitan estas complicaciones en un EA/indicador/script, como pasar una variable por dirección? ¿Qué quiere decir con los términos: pseudovariable, pool de direcciones y alineación constante?
 
drknn:
¿Por qué necesitas tales complejidades en un EA/indicador/script, como pasar una variable por dirección? ¿Qué quiere decir con los términos: pseudovariable, pool de direcciones y alineación constante?

Los compiladores y los intérpretes son similares.

Así que piénsalo.

Cómo se pasan los parámetros (variables) a una función, y si se pasa una expresión a una función...

;)

 
Sorento:

Yo también comparto mis dudas.

No pretendo ser un superprofesional, no llego al nivel de un profesional - nadie lee los mensajes... está claro a ojo de buen cubero.

Pero cuanto más escribo el código (no mucho hasta ahora) - una pregunta ocurre:

¿Cómo se pasan los parámetros en las funciones?

(¿por nombre o por valor?)

Tengo la sospecha de que las variables de cadena se ponen nerviosas al pasarlas...

;)


Aunque no me considero un profesional o un superprofesional, pero intentaré responder :).

MT está implementado en C2C++ y los desarrolladores recomiendan consultar los estándares de este lenguaje en caso de cualquier duda.

Según el estándar C2C++, todos los parámetros, excepto los arrays, se pasan por valor, incluidas las expresiones. Es decir, se pasan copias de los parámetros: el cambio de un parámetro pasado por valor dentro de una función llamada no hace que se cambie el parámetro en la función externa que llama. Si el cambio es necesario, debe pasarse por referencia (por dirección), es decir, se pasa la dirección en la que se encuentra la variable pasada como parámetro. Entonces el valor situado en esta dirección puede ser modificado, la dirección no puede ser modificada. Todas las matrices se pasan por referencia, es decir, las direcciones se pasan inmediatamente: de lo contrario, habría que copiar una enorme cantidad de datos en la pila.

Para evitar que un parámetro pasado por referencia se modifique dentro de la función a la que se llama, C/C++ utiliza el modificador const.

En C2C++, las cadenas son matrices de caracteres, con una diferencia: dicha matriz debe terminar con el terminador de cadena '\0'.

En la ACM, una cadena es una estructura que contiene el tamaño y el puntero a la cadena (es decir, la propia matriz de la cadena), si los ejemplos son creíbles.

Este ejemplo es para C2C++ :

//----
struct MqlStr
  {
   int               len;
   char             *string;
  };

Aquí char * es un puntero a una variable de tipo carácter (tipo char). El tipo de puntero en sí mismo (char*, int*, double*.......) es siempre un entero - es una dirección de celda. Esto significa que la variable no almacena una cadena, sino una dirección de celda. El valor del carácter en sí mismo puede ser recuperado así : *cadena o cadena[0]. Para que funcione, siempre debemos asignar memoria para un array a menos que esté dispuesto de forma estática, es decir, que su tamaño no esté especificado en la descripción, por ejemplo

char cadena[1025] ;

es una matriz de caracteres, de 1025 elementos.... Si el último carácter (string[1024]='\0'), la matriz podría ser tratada como una cadena de 1024 caracteres.

Los elementos de la cadena pueden recibirse como elementos del array habitual string[i]. Cuando se coloca dinámicamente, se asigna a una cadena + 1 elemento y el último carácter del final de la cadena es......

En consecuencia, la cadena siempre se pasa por referencia. Que esté prohibido modificarlo depende de la implementación de la ICL y se puede comprobar con un ejemplo: pasar una cadena a la función, cambiar el valor allí y leerlo (este valor) después de que la función llamada termine.

Buena suerte.

 
VladislavVG:

En consecuencia, la cadena siempre se pasa por referencia. Que puedan ser modificados depende de la implementación de la ACM y se puede comprobar con un ejemplo: pasar una cadena a una función, cambiar el valor allí y leerlo (este valor) después de que la función llamada haya terminado.

La modificación no está prohibida. Comprobado.
 
drknn:

Oh, mierda. Debe ser una pregunta para los desarrolladores, o todo no está bien en la DLL. No soy un programador de C++ - traté de hacer un par de programas una vez, y descubrí que mientras tienes un shell de C++ instalado, todo funciona. Pero en cuanto se transfiere el ejecutable a otro ordenador, en cuanto se descubre la falta de algún ciclo dll. Tampoco me gusta trabajar con cuerdas. Dejé ese lenguaje y me decidí por Delphi. Tal vez usted puede tratar de hacer su dll en él - tales dlls son bastante normales con el terminal ...

P.D.

Así que no entiendo por qué todo el mundo alaba tanto el C++, si incluso a nivel de elegir un shell para programar surgen problemas con este lenguaje...

El caso es que todas las bibliotecas y scripts con estas bibliotecas funcionan bien si las cargas manualmente en un gráfico. También funcionan si se cargan en el gráfico mediante programación desde el proceso actual.

El problema se produce cuando se cargan desde un proceso remoto.

=====================================

En cuanto a la transferencia del código a otro ordenador. Lo más probable es que estés migrando una versión del depurador. Extrae las bibliotecas de depuración de Studio. Deberías haber compilado el comunicado. Entonces todo habría funcionado en todas partes.

 
Me equivoqué al llamarlo por analogía.
 
TheXpert:
Me equivoqué al llamarlo por analogía.

Sí. Incluso parpadeé al ver los términos del título de este hilo - no me había dado cuenta de que los nombres eran diferentes - mi atención ya estaba sintonizada con un patrón particular.
Razón de la queja: