Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 211

 
fxsaber # :

4. hatayı kendiniz bildirdiniz. ZeroMemory neden {} öğesinden daha kötü? Onlar. özel erişim için bazı yetkisiz mekanizmalara sahibiz, ancak derleyici herhangi bir nedenle tespit edemez.

Geliştiricilerin düzeltmeyeceği beklentisi? Derleyici ZeroMemory'ye de tepki vermediğinde

 
A100 # :

4. hatayı kendin bildirdin. ZeroMemory neden {} öğesinden daha kötü? Onlar. özel erişim için bazı yetkisiz mekanizmalara sahibiz, ancak derleyici herhangi bir nedenle tespit edemez.

Bunu bir hata olarak görmüyorum. Yapıcı içermeyen yapı, başlatma devam ediyor. FileReadStruct - o zaman oldukça korkunç bir şey ...

 
fxsaber # :

Bunu bir hata olarak görmüyorum. Yapıcı içermeyen yapı, başlatma devam ediyor. FileReadStruct - o zaman oldukça korkunç bir şey ...

 uint    FileReadStruct ( 
   int           file_handle,         // handle файла 
   const void &  struct_object,       // структура, куда происходит считывание 
   int           size=- 1              // размер структуры в байтах 
   );

Açıklamadan bir aldatmaca gibi görünüyor.

 
A100 # :

Açıklamadan bir aldatmaca gibi görünüyor.

Evet, bu tam bir aldatmaca.

 
A100 # :

Açıklamadan bir aldatmaca gibi görünüyor.

Kopyala-yapıştır yapıları olmayan belgelere bağlantılar - garip.

 
fxsaber # :

Kopyala-yapıştır yapıları olmayan belgelere bağlantılar - garip.

Genel olarak, bu işlevi ilk kez görüyorum - açıklamada bir hata olduğunu bildirmiş olabilirler

Açıklamaya ek olarak, yapısal bir hata da var:

 struct X {
    X( int i ) : i( i ) {}
     const int i;
};
void OnStart ()
{
    X x( 5 );
    FileReadStruct ( 0 , x, - 1 ); //(1) нормально ???
    ZeroMemory ( x );             //(2) Error: 'x' - not allowed for objects with protected members or inheritance
}

ZeroMemory neden FileReadStruct'tan daha kötü?

Yine, hesaplama, Geliştiricilerin fark etmeyecek / ertelemeyecek / düzeltmek için çok tembel olmayacak (gerektiğinde altını çizecek) mi?

Argümanım basit: ZeroMemory tüm bunlarla derlendikten sonra ( private dahil), ancak fark ettiler / etrafta dolaştılar / düzelttiler

 
A100 # :

Genel olarak, bu işlevi ilk kez görüyorum - açıklamada bir hata olduğunu bildirmiş olabilirler

Bu işlevin açıklamasına hiç bakmadım. Adından her şey açıktır.

Açıklamaya ek olarak, yapısal bir hata da var:

Aşağıdaki kodda herhangi bir hata bulunmamaktadır.

 struct MqlTick2 : private MqlTick {};

void OnStart ()
{
  MqlTick2 Ticks[ 4 ] = {};

   uchar Bytes[];
  
   StructToCharArray (Ticks[ 0 ], Bytes);
   CharArrayToStruct (Ticks[ 1 ], Bytes);

   FileReadStruct ( 0 , Ticks[ 0 ]);
   FileWriteStruct ( 0 , Ticks[ 1 ]);
  
   FileWriteArray ( 0 , Ticks);
   FileReadArray ( 0 , Ticks);
}

Can sıkıntısı rahatlığı yenemez!


ZeroMemory neden FileReadStruct'tan daha kötü?

Belgelere başvurmayı seviyorsunuz. ZeroMemory'nin sınırlamaları hakkında her şey orada yazıyor. Ve Dosya* kısıtlamaları hakkında - hayır. ZeroMemory'ye göre, olandan ilerliyorum. Şimdi elverişsiz, ama bilerek yapılmış gibi görünüyor.

Bu iki işlevi karşılaştırırsak, FileReadStruct yalnızca basit yapılarla çalışır. Bu temel farktır.


Bu konu MQL5'in özellikleri ile ilgilidir. Bire işaret etti (MQL4'te çalışmıyor). Bu diyalog ne yazık ki zaman kaybıdır.

 
fxsaber # :

Aşağıdaki kodda herhangi bir hata bulunmamaktadır.

Belgelere başvurmayı seviyorsunuz. ZeroMemory'nin sınırlamaları hakkında her şey orada yazıyor. Ve Dosya* kısıtlamaları hakkında - hayır. ZeroMemory'ye göre, olandan ilerliyorum. Şimdi elverişsiz, ama bilerek yapılmış gibi görünüyor .

Bu iki işlevi karşılaştırırsak, FileReadStruct yalnızca basit yapılarla çalışır. Bu temel farktır.

Bir hata var (sadece derleyici bunu şu anda raporlamıyor) ve sınıf dışındaki belirli bir işlevin (yani FileReadStruct) bu sınıfın korumalı üyelerine doğrudan erişim sağlaması gerçeğinden oluşuyor; çok özel, korumalı kavramı.

Bu özellik neden ZeroMemory'den ve yüzlerce diğerlerinden daha iyi? Ama hiçbir şey! - sadece Geliştiricilerin eline henüz geçmedi. Daha önce ZeroMemory'nin belgelerde de herhangi bir kısıtlaması yoktu. Ve şimdi var - ve size herhangi bir rahatsızlık vermek için değil - ama tek bir ilke çalıştığı için - bu FileReadStruct, bu ZeroMemory, bu yüzlerce benzer işlev - hepsi eşittir

 
A100 # :

diğer yüz benzer fonksiyonun hepsinin eşit olduğu

FileLoad/FileSave hala eşitsizlik hazinesinde.

Can sıkıntısı rahatlığı yenemez!

Kendini ayağından vurman için bir sebep yok.

 
fxsaber # :

FileLoad/FileSave hala eşitsizlik hazinesinde.

Kendinizi ayağınızdan vurmanız için bir sebep yok.

Özel ilan ederek ayağınıza kurşun sıkıyorsunuz. Kendinize erişiminizi kısıtladınız ve sonra harici işlevlerin genel erişime ihtiyaç duyduğu kodun neden aniden çalışmayı durdurduğunu merak edeceksiniz.

Neden: