Qualquer pergunta de um PROFI para um SUPER PROFI - 1. - página 3

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

O que você quer dizer?
 
drknn:

O que você quer dizer?

Não é tão simples assim.

agora dentro da função - trabalhar com a variável passada.

Como a matemática nos ensina - se você passou uma pseudo-variável por endereço - todas as maravilhas nela se foram.

Mas se o grupo de endereços estiver alinhado com constantes - tudo será diferente.

0 torna-se 1 e vice versa.

;)

 
Por que você precisaria de tais complicações em um EA/indicador/script, como passar uma variável por endereço? O que você quer dizer com os termos: pseudo-variável, grupo de endereços e alinhamento constante?
 
drknn:
Por que você precisa de tais complexidades em um EA/indicador/script, como passar uma variável por endereço? O que você quer dizer com os termos: pseudo-variável, grupo de endereços e alinhamento constante?

Os compiladores e intérpretes são similares.

Então pense sobre isso.

Como os parâmetros (variáveis) são passados para uma função, e se uma expressão é passada para uma função...

;)

 
Sorento:

Eu também compartilho minhas dúvidas.

Eu não finjo ser um super-profissional, não chego ao nível de um profissional - ninguém lê mensagens... é claro aos olhos do cavalo.

Mas quanto mais eu escrevo código (não muito até agora) - uma pergunta ocorre:

Como os parâmetros são passados em funções?

(por nome ou por valor?)

Tenho uma suspeita de que as variáveis das cordas ficam trêmulas ao passá-las.

;)


Embora eu não me considere um profissional ou um super profissional, mas vou tentar responder :).

O MT é implementado no C2C++ e os desenvolvedores recomendaram consultar as normas deste idioma em caso de qualquer incerteza.

De acordo com a norma C2C++, todos os parâmetros, exceto as matrizes, são passados por valor, incluindo as expressões. Ou seja, cópias de parâmetros são passadas: alterar um parâmetro passado por valor dentro de uma função chamada não faz com que o parâmetro na função chamada externa seja alterado. Se a mudança for necessária, ela deve ser passada por referência (por endereço) - ou seja, o endereço no qual a variável passada como parâmetro está localizada é passado. Então o valor localizado neste endereço pode ser alterado, o endereço não pode ser alterado. Todos os conjuntos são passados por referência, ou seja, os endereços são passados imediatamente: caso contrário, uma enorme quantidade de dados teria que ser copiada através da pilha.

Para evitar que um parâmetro passado por referência seja alterado dentro da função que está sendo chamada, C/C++ utiliza o modificador constante.

Em C2C++, as cordas são matrizes de caracteres, com uma diferença: tal matriz deve terminar com o terminador de cordas '\0'.

Em MCL, uma corda é uma estrutura que contém o tamanho e o ponteiro para a corda (ou seja, a própria matriz de corda), se quisermos acreditar nos exemplos.

Este exemplo é para o C2C++ :

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

Aqui o char * é um ponteiro para uma variável do tipo personagem (tipo char). O ponteiro em si (char*, int*, double*.......) é sempre um número inteiro - é um endereço celular. Isto significa que a variável não armazena uma string, mas um endereço de célula. O valor do próprio personagem pode ser recuperado desta forma: *string ou string[0]. Para trabalhar, devemos sempre alocar a memória para uma matriz se ela não for colocada estaticamente, ou seja, seu tamanho não está especificado na descrição, por exemplo, desta forma

fio de carvão[1025] ;

é um conjunto de caracteres, de 1025 elementos.... Se o último caractere (string[1024]='\0'), a matriz poderia ser tratada como uma string de 1024 caracteres.

Os elementos da cadeia de caracteres podem ser recebidos como elementos da cadeia de caracteres habitual[i]. Ao colocar dinamicamente, uma cadeia de caracteres é atribuída + 1 elemento e o último caractere da extremidade da cadeia de caracteres é......

Assim, o fio é sempre passado por referência. Se é proibido modificá-lo depende da implementação da ICL e pode ser verificado com exemplo: passe uma string para funcionar, mude o valor lá e leia-o (este valor) após a chamada função terminar.

Boa sorte.

 
VladislavVG:

Assim, o fio é sempre passado por referência. Se eles podem ser modificados depende da implementação do MCL e podem ser verificados com um exemplo: passe uma string para uma função, mude o valor lá e leia-o (este valor) depois que a função chamada estiver concluída.

A modificação não é proibida. Verificado.
 
drknn:

Besteira. Deve ser uma questão para os desenvolvedores, ou tudo não está bem na DLL. Eu não sou um programador C++ - tentei fazer alguns programas uma vez, e descobri que enquanto você tem uma concha C++ instalada, tudo funciona. Mas assim que você transfere o executável para outro computador, assim que você descobre a falta de algum ciclo dll. Eu também não gosto de trabalhar com cordas. Eu desisti dessa linguagem e me instalei na Delphi. Talvez você possa tentar fazer seu dll nele - tais dlls são bem normais com o terminal...

P.S.

Portanto, não entendo porque todos elogiam tanto o C++, se mesmo no nível de escolher uma concha para problemas de programação surgem com esta linguagem...

A questão é que todas as bibliotecas e scripts com estas bibliotecas funcionam bem se você carregá-las manualmente em um gráfico. Eles também funcionam se você carregá-los no gráfico de forma programática a partir do processo atual.

O problema ocorre quando você os carrega de um processo remoto.

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

Em relação à transferência do código para outro computador. Muito provavelmente você estava migrando uma versão depuradora. Ele retira as bibliotecas de depuração do Studio. Você deveria ter compilado o lançamento. Então, tudo teria funcionado em todos os lugares.

 
Eu estava errado ao chamá-lo por analogia.
 
TheXpert:
Eu estava errado ao chamá-lo por analogia.

Certo. Eu até pisquei nos termos do título deste tópico - não tinha notado que os nomes eram diferentes - minha atenção já estava afinada com um padrão particular.