Hatalar, hatalar, sorular - sayfa 2867

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

Anladım, burada farklı yorumladım.

Sonuçta ikame edilen bir sabit değil, bir makrodur.

Sayesinde.
 
fxsaber :

Eylemde MACRO ve MACRO2 ile çok aynı.

Son kullanıcı için - evet, iki parametreli bir makro kullanılır

 
Yararlı ve zararlı uyarılar konusunda:
 #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

Shell C++ Akıllı Derleyici ne yapar? Doğru şekilde! Bariz bir yazım hatası olduğunda ve (1) satırında - 'x' eksik

    A( int x, int y ) :

- bir uyarı verir : 'A::x' kendisiyle başlatılır. Ve her şeyin normal olduğu yerde - hiçbir şey pes etmez !!!

Ve MQL derleyicisi ne yapar:

 #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

Gerektiğinde ve bariz bir yazım hatası olduğunda - sessizdir, ancak gerekli olmadığında ve her şey yolunda olduğunda - uyarır: 'y' beyanı üyeyi gizler

Neden tam tersi?
 

2632

görsel testte bir duraklamada, fare ile sürükleyerek veya ok tuşları ile grafiği görüntülemek (geri/ileri) mümkün değildir.

 

Makro konusunun sular altında kaldığını görüyorum, ayrıca sorularım var

Neden int ve uint C ve D yerine geçiyor?
Kod uzun ve ulong olarak değiştirilmelidir
Yoksa derleyici 280 boyutunu görüp optimize edecek kadar akıllı mı?

 #define A 280      // int
#define B 280 U   // unsigned int
#define C 280 L    // long
#define D 280 LU    // 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


İkinci soru.
Float için neden derleme hatası

 #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


Üçüncü soru.

 #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 :

Makro konusunun sular altında kaldığını görüyorum, ayrıca sorularım var

Neden int ve uint C ve D yerine geçiyor?
Kod uzun ve ulong olarak değiştirilmelidir
Yoksa derleyici 280 boyutunu görüp optimize edecek kadar akıllı mı?


İkinci soru.
Float için neden derleme hatası


Üçüncü soru.

1. L uzun, ancak c++. LL'yi deneyin
2.f
3 '\n' karakterdir
 
Vladimir Simakov :
1. L uzun, ancak c++. LL'yi deneyin
2.f
3 '\n' karakterdir

Evet. İşe yaradı.
Ama bir şey karakter tipi '+' kısa gösteriyor
Dize boyutu 2 bayt olarak ikameler

 #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 :

Evet. İşe yaradı.
Ama bir şey karakter tipi '+' kısa gösteriyor
Dize boyutu 2 bayt olarak ikameler

Ve neden öyle?

Bu bir hata mı yoksa bir özellik mi?

 
Vladimir Simakov :

Neden öyle?

Bu bir hata mı yoksa bir özellik mi?

Evet, kim bilir.
Unicode yüzünden olabilir mi?

 
Roman :

Evet, kim bilir.
Unicode yüzünden olabilir mi?

Hayır, geliştiricilerin mantığının kendisi oldukça anlaşılabilir, ancak bana gelince, kendimi, ne zaman ve ne zaman ihtiyacım olursa açıkça belirtmeyi tercih ederim.