Erros, bugs, perguntas - página 2867

 
A100:
#define  TMP VALUE      // TMP = 10 VALUE

Percebi, interpretei-o aqui de forma diferente.

Não é uma constante, mas uma macro, afinal de contas.

Obrigado.
 
fxsaber:

Tão idêntica em acção à MACRO e MACRO2.

Para o utilizador final, sim, é utilizada uma macro com dois parâmetros

 
À questão das advertências úteis e prejudiciais:
#ifdef __cplusplus
class A {
    A( int  , int y ) :         //(1)
                        x( x ), //(2) warning: 'A::x' is initialized with itself
                        y( y )  //(3)
                    {}
    int x, y;
};
#endif

O que faz um compilador Shell C++ inteligente? Certo! Onde existe um erro óbvio e na linha (1) - falta 'x

    A( int x, int y ) :

- gera o aviso: 'A::x' é inicializado consigo mesmo. E não mostra nada naqueles lugares onde está bem!

E o que é que o compilador MQL faz?

#ifdef __MQL__
class A {
    A( int  , int y ) :         //(1) warning: declaration of 'y' hides member
                        x( x ), //(2) нормально
                        y( y )  //(3)
                    {}
    int x, y;
};
#endif

É silenciosa quando precisa e há uma impressão errada óbvia, mas quando não precisa e tudo está bem, avisa: a declaração de 'y' esconde o membro

Porque é o contrário?
 

2632

Quando se faz uma pausa no teste visual, não é possível navegar (rebobinar/avançar) o gráfico usando o rato de arrastar e largar ou as setas do teclado.

 

Vejo que o tema das macros descolou, também tenho algumas perguntas

Porquê int e uint são utilizados para C e D ?
Onde se deve substituir o longo e ulong
ou talvez o compilador seja tão inteligente que sinta o tamanho 280 e o optimize?

#define  A 280    // int
#define  B 280 U   // unsigned int
#define  C 280L   // long
#define  D 280LU  // unsigned long
#define  K 28.0   // double

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(A));
   Print(typename(B));
   Print(typename(C));
   Print(typename(D));   
   Print(typename(K));
}
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  int
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  uint
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  int
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  uint
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  double


A segunda pergunta.
Porque é que existe um erro de compilação para flutuar?

#define  L 28.0 F  // float

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(L));
}
'TestScript.mq5'                TestScript.mq5  1       1
'F' - undeclared identifier     TestScript.mq5  36      19
'F' - some operator expected    TestScript.mq5  36      19
2 errors, 0 warnings                            3       1


A terceira pergunta.

#define  E '\n'         // char
#define F B'111111111' // int
#define  J ""           // string

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(E));
   Print(typename(F));
   Print(typename(J));
}
2020.10.07 04:55:00.406 TestScript (EURUSD,M1)  ushort
2020.10.07 05:41:01.204	TestScript (EURUSD,M1)	uint
2020.10.07 04:55:00.406 TestScript (EURUSD,M1)  string
 
Roman:

Vejo que o tema das macros descolou, também tenho algumas perguntas

Porquê int e uint são utilizados para C e D ?
Onde se deve substituir o longo e ulong
ou talvez o compilador seja tão inteligente que sinta o tamanho 280 e o optimize?


A segunda pergunta.
Porque é que existe um erro de compilação para flutuar?


A terceira pergunta.

1. L é longo, mas c+++. Experimente LL
2. f
3 '\n' é char
 
Vladimir Simakov:
1. L é longo, mas c+++. Experimente LL.
2. f
3 '\n' é char.

Sim, funciona.
Mas o tipo de carácter '+' mostra ushort
Encaixa como uma corda de 2 bytes

#define A 280          // int
#define B 280 U         // unsigned int
#define C 280 LL        // long
#define D 280 LLU       // unsigned long
#define E 28.0         // double
#define F 28.0 f        // float
#define J '+'          // char
#define K B'111111111' // int

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(A));
   Print(typename(B));
   Print(typename(C));
   Print(typename(D));   
   Print(typename(E));
   Print(typename(F));
   Print(typename(J));
   Print(typename(K));
}
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  int
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  uint
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  long
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  ulong
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  double
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  float
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  ushort
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  uint
 
Roman:

Sim, funcionou.
Mas o tipo de caractere '+' mostra curto
Define como um tamanho de corda de 2 bytes

Porque o faria?

É um insecto ou um insecto ou algo assim?

 
Vladimir Simakov:

Porque é que é assim?

É uma falha ou um insecto ou algo assim?

Não sei.
Talvez seja o Unicode?

 
Roman:

Quem sabe.
Talvez seja o Unicode?

Não, a lógica dos criadores é compreensível, mas para mim, prefiro especificar "u'y" explicitamente quando e se eu precisar