Funções dentro de chaves

 

Pessoal, bom dia.

Procurei na documentação, mas não encontrei. Hoje vi em alguns códigos que estou estudando que colocaram chamadas para funções dentro de chaves ao definir uma variável, tipo:

double preco = {funcao(bla bla bla};

Até pensei ser um erro no código e removi as chaves. O compilador deu erro falando sobre as chaves... Coloquei de volta e voltou a funcionar. Mas eu não encontrei uma explicação do que significa ter essas funções sendo chamadas dentro de chaves. Alguém sabe em que parte da documentação ele fala sobre isso?

Agradecido!

 
b2tradingclub:

Pessoal, bom dia.

Procurei na documentação, mas não encontrei. Hoje vi em alguns códigos que estou estudando que colocaram chamadas para funções dentro de chaves ao definir uma variável, tipo:

double preco = {funcao(bla bla bla};

Até pensei ser um erro no código e removi as chaves. O compilador deu erro falando sobre as chaves... Coloquei de volta e voltou a funcionar. Mas eu não encontrei uma explicação do que significa ter essas funções sendo chamadas dentro de chaves. Alguém sabe em que parte da documentação ele fala sobre isso?

Agradecido!

Poderia dar um exemplo com mais contexto? Pra mim ta parecendo errado e o codigo deveria ser outro.

Pra mim seria so a inicializacao de um elemento de um array com o valor de retorno da funcao, so que pra ser isso teria que ser assim:

double preco[] = { funcao(bla, bla, bla) };

Note que tem um abre e fecha chaves que define a variavel como um numero indefinido de elementos e quando se passa o inicializador, o compilador entende que eh a variavel eh um vetor de um elemento. Entretanto, ate onde me lembro no MQL teria que ser atribuido o valor da funcao depois porque ele nao permite chamar uma funcao no inicializador (regiao entre chaves). Tem certeza que eh uma funcao e nao um define?

 
Ricardo Rodrigues Lucca #:

Poderia dar um exemplo com mais contexto? Pra mim ta parecendo errado e o codigo deveria ser outro.

Pra mim seria so a inicializacao de um elemento de um array com o valor de retorno da funcao, so que pra ser isso teria que ser assim:

double preco[] = { funcao(bla, bla, bla) };

Note que tem um abre e fecha chaves que define a variavel como um numero indefinido de elementos e quando se passa o inicializador, o compilador entende que eh a variavel eh um vetor de um elemento. Entretanto, ate onde me lembro no MQL teria que ser atribuido o valor da funcao depois porque ele nao permite chamar uma funcao no inicializador (regiao entre chaves). Tem certeza que eh uma funcao e nao um define?

Talvez realmente seja isso. Vi muitos códigos que colocam também: = {0}; - só que no mql5 dá erro.

 
b2tradingclub #:

Talvez realmente seja isso. Vi muitos códigos que colocam também: = {0}; - só que no mql5 dá erro.

Entao,

(1) double preco[] = { 0 };

(2) double preco[5] = { 0, };

Esses (1) e (2) parecem iguais, mas é completamente diferente. Voce consegue entender o que cada um faz?

 
Ricardo Rodrigues Lucca #:

Entao,

(1) double preco[] = { 0 };

(2) double preco[5] = { 0, };

Esses (1) e (2) parecem iguais, mas é completamente diferente. Voce consegue entender o que cada um faz?

O segundo, acho que preenche a primeira posição de um array de 5 (chute). O 1 da erro. Vi vários códigos assim que retornaram erro quando tentei compilar no mql5.

 
b2tradingclub #:

O segundo, acho que preenche a primeira posição de um array de 5 (chute). O 1 da erro. Vi vários códigos assim que retornaram erro quando tentei compilar no mql5.

Ambos compilam e funcionam.

(1) Define uma variavel de array dinamico inicializado com um elemento e o mesmo valendo zero. Aqui voce pode usar array_resize.

(2) Define uma variavel de array estatico inicializando os elementos 0 a 4 com zero. Aqui voce nao pode usar array_resize.

A inicializacao do array tambem pode ser feito por ZeroMemory(), mas nao tem como definir o valor que vai ser inicializado ja que eh sempre zero na funcao, ali no (2) o primeiro valor sera copiado pros demais.

 
Se você realmente quer ajuda, publica parte do codigo ao mens, assim é só chute.
 
Cesar Afif rezende Oaquim #:
Se você realmente quer ajuda, publica parte do codigo ao mens, assim é só chute.
Isso eh da linguagem.
 

Não era um código específico. Eu estava testando e baixando um monte de coisas para estudar e quando tentava compilar códigos que tinha essa expressão de = {0} ele dava erro.

 
b2tradingclub #:

Não era um código específico. Eu estava testando e baixando um monte de coisas para estudar e quando tentava compilar códigos que tinha essa expressão de = {0} ele dava erro.

Sera que voce nao esta estudando mt4 e eu respondendo acreditando em ser no mt5?
 
Ricardo Rodrigues Lucca #:
Sera que voce nao esta estudando mt4 e eu respondendo acreditando em ser no mt5?

Ricardo, nem olhamos o mt4. O foco é totalmente mt5. Acho que os códigos que vi eram realmente de mt4 e acabou misturando as bolas.