pergunta para #define experts - página 2

 
Oh, meu Deus, os meninos não podem viver sem almofadas.
 
Nikolai Karetnikov:

Obrigado! )

Essencialmente.

Foi aí que fiquei com a opção de classe. Mesmo coisas tão elementares como #define parametrização são rapidamente esquecidas sem uso diário.

Com os nervos em franja.

Deus, como todo mundo é sensível aqui; você pode fazer uma pergunta sem implicação, sem a intenção de ofender ou insultar, mas não, em algum lugar na alma de um gênio não reconhecido há um desejo ardente de se afirmar às custas de mais um amador. Não o encontro no fórum inglês, embora eu escreva lá regularmente. Sabendo disso, geralmente tento não reagir a tais observações, mas se Dmitry, você quiser brincar em uma batalha verbal, eu lhe darei o prazer de mergulhá-lo de cabeça em suas próprias emanações.

Corte a mosca, baby.

 
Vladimir Simakov:

Por que você não mostrou logo essa decisão ao homem?)

UPD: bezgovna - soletrada sem sh..t ))))

Bem, você só está gostando da idéia de que eu não sabia disso. Portanto, continue batendo em si mesmo em um orgasmo de suas próprias maravilhas.

 
Dmitry Fedoseev:
Oh cara, os meninos não podem mais viver sem almofadas.

Sobre as gaxetas.

O que há de bom no singleton? Porque é possível armazenar registros de estado, de processo com lógica complexa, etc., mantendo tudo conciso no código principal. Desta forma, é criada uma arquitetura de projeto adequada e o próprio código se torna mais legível.

PS. Caso contrário, sim, tudo é para um ventilador. Muitas pessoas aqui na comunidade gostam do código do esparguete com notação húngara, e o masoquismo de tentar todas as ordens e posições (todas elas) em cada carrapato é ótimo).

 

Há muito tempo (muitos anos atrás) .... Já havia um fio sobre os melhores troncos, seja em um fio separado ou em outro fio que eu não consigo lembrar.

Mas isso foi feito de uma maneira ligeiramente diferente. Aí eles defangeram o nome da função e acrescentaram lá todo tipo de macro linhas de nomes de funções e assim por diante... e então você poderia mudar o manipulador na mosca

algo como "#defin PRINT prepare; Print"

e a impressão em si no estilo de

void Print (string a; string a1="" " ;string a2="""; ...... // 64 vezes. Gostaria que pudéssemos apenas escrever ...a[]

{

Imprimir (Nossa preparação, argumentos);

}

A definição poderia ter sido tratada como uma impressão comum, e mudando o manipulador podemos escrever os dados em um arquivo ou exibi-los. O número de argumentos pode ser qualquer (até 64) // para aqueles que ainda não aprenderam.

A propósito, isto éem parte o que o autor estava pedindo))

 
Dmitry Fedoseev:
Mas, infelizmente, você não vai impressionar os otários.

Você gostaria de?

Desculpe, mas como me lembro dos dias em que Assembler ainda era utilizado, a extensão macro (macro ) é uma ferramenta que permite substituir sua definição por seu código imediatamente antes da compilação.

É que a programação em Assembler é um pouco incômoda e não há sub-rotinas.

A programação em MQL é um pouco mais confortável.

Pergunta: Você ficaria mais confortável escrevendo uma sub-rotina, ou apenas a impressão("Sem folha"); ou algo para pré-definir no pré-processador?

 
Алексей Тарабанов:

(1) Você gostaria de?

Desculpe, mas como me lembro dos dias em que Assembler ainda era utilizado, a extensão macro (macro ) é uma ferramenta que permite substituir sua definição por seu código imediatamente antes da compilação.

(2) Simplesmente, é um pouco complicado programar em Assembler e não há subrotinas lá.

A programação em MQL é um pouco mais confortável.

(3) Pergunta: Você se sentiria mais confortável escrevendo um subprograma, ou apenas a impressão ("Sem folha"); ou pré-definir algo no pré-processador?

1) A questão não é para mim.

2) Existem sub-rotinas em assembler.

3) Eu me sinto mais confortável para não mentir em perguntas que não valem um ovo podre.

 
Alexandr Andreev:

Há muito tempo (muitos anos atrás) .... Já havia um fio sobre os melhores troncos, seja em um fio separado ou em outro fio que eu não consigo lembrar.

Mas isso foi feito de uma maneira ligeiramente diferente. Aí eles defangeram o nome da função e acrescentaram lá todo tipo de macro linhas de nomes de funções e assim por diante... e então você poderia mudar o manipulador na mosca

algo como "#defin PRINT prepare; Print"

e a impressão em si no estilo de

void Print (string a; string a1="" " ;string a2=""";...... // é uma pena que você não possa simplesmente escrever ...a[]

{

Imprimir (Nossa preparação, argumentos);

}

A definição poderia ter sido tratada como uma impressão comum, e mudando o manipulador podemos escrever os dados em um arquivo ou exibi-los. O número de argumentos pode ser qualquer (até 64) // para aqueles que ainda não aprenderam.

A propósito, isto éexatamente o que o autor estava perguntando))

string aN=""" e 63 vezes - isso é uma fúria.

Deixe-me explicar:

  1. Um fio é um objeto que é um invólucro sobre um wchar_t*.
  2. Fazendo cordel=""". 63 vezes, você faz o seguinte: aloca memória para 63 objetos de corda (na pilha neste caso), chama o construtor paramétrico (63 vezes), aloca um buffer wchar_t* de algum tamanho na pilha (só lá), os dois primeiros bytes são inicializados com 0x0000 (sim, isso acontece 63 vezes também).

Se você fizer dessa forma, faça string=NULL, neste caso você economizará grandes custos de alocação de memória desnecessária em pilha.

UPD. Não, eu estou errado, se feito corretamente, não haverá alocação de memória na pilha.

 
Vladimir Simakov:

string aN=""" e 63 vezes é feroz.

Deixe-me explicar:

  1. é um objeto que é um envoltório sobre o wchar_t*.
  2. Fazendo cordel=""". 63 vezes, você faz o seguinte: aloca memória para 63 objetos de corda (na pilha neste caso), chama o construtor paramétrico (63 vezes), aloca um buffer wchar_t* de algum tamanho na pilha (só lá), os dois primeiros bytes são inicializados por 0x0000 (sim, isto também acontece 63 vezes).

Se você fizer dessa forma, faça string=NULL, neste caso você economizará grandes custos de alocação de memória desnecessária em pilha.

UPD. Não, eu estou errado, se feito corretamente, não haverá alocação de memória na pilha.

Mais uma vez, você não entende do que estamos falando. Alexander escreve sobre a substituição de Print() via define (para evitar rastejar por todo o arquivo e procurar por todas as impressões). O problema disto é que a impressão pode ter vários parâmetros, embora ninguém os distinga como parâmetros - apenas um fio conectado por vírgulas. Portanto, para fornecer um substituto para a função de impressão padrão, você precisa de uma função que aceite 64 parâmetros opcionais (para corresponder totalmente à função Print()). E você precisa dele para adicionar alguns dados antes do registro, talvez uma faixa com uma seta (==>) para melhor visibilidade, talvez um número de linha, data ou saída em um arquivo. Ninguém pode se preocupar com a velocidade disto, pois é feito em casos especialmente complexos de erros de busca, e depois removido.

 
string _info;
void _Print(string s,string s1="",string s2="",string s3="",string s4="",string s5="",string s6="",string s7="",string s8="")//.....
   {
   string ss;
   StringConcatenate(ss,s,s1,s2,s3,s4,s5,s6,s7,s8);//....
   //Comment(_info,ss);
   Print(_info,ss);
   }
#define Print _info=__FILE__+" line "+__LINE__ +" "+__FUNCSIG__+" Print: "; _Print

void OnStart()
  {
   
   Templ();
  }
  
void Templ()
   {
   Print("Error, a!=",5," and other....",3,4,5);
   Print("a=",5);
   Print("Hi");
   }


Todos parecem entender.....

Portanto, isto é para aqueles que estão apenas começando o seu caminho....

Podemos embrulhar tudo em uma classe stat e retornar uma referência, que depois iguala o resto, já que este método tem um menos quando se trabalha com if (a!=5) Print(a); não vai funcionar, você deve sempre escrever if (a!=5) {Print(a);}, nas aulas podemos corrigir este momento, mas eu sou muito preguiçoso)) e em geral, parece que tudo está nos arquivos de história

o caminho com as classes, inicializar nossos dados via método estático e combinar o operador chamar nossa impressão.... entãose (a!=5) Imprimir(a); vai funcionar