Hatalar, hatalar, sorular - sayfa 1963

 
A100 :
Fark çok büyükse, neden her iki sürüm de normal olarak C++ ile derleniyor?

Bu durumda C ++ 'daki otorite bu değil, çünkü. mantığa dayalı çıkarımlar. Yukarıda, örneği çıktıyla yeniden düzenledim.

Tek yapman gereken bir değişiklik yapmak

 // typedef void (*fn)();
typedef void (*fn123)();

Nasıl yazdırılacağı tamamen farklı olacaktır. Derleyiciden "aptaldan daha akıllı" olmasını ve C++'daki gibi davranmasını isteyebilirsiniz. Ama bu aslında tartışmalı bir karar.

Onlar. bu tür "yardım" derleyicide uygulanabilir, ancak yaklaşımlardaki farkı gösterdi.

 
A100 :
iyi. Fark ne?

görünüşe göre derleyici için basit bir aktarımla f, bir işlev işaretçisi olarak algılanmaz.

 
Комбинатор :

görünüşe göre derleyici için basit bir aktarımla f, bir işlev işaretçisi olarak algılanmaz.

Katılıyorum (her şey basit ve aslında hiçbir fark yok)
 
Комбинатор :

görünüşe göre derleyici için basit bir aktarımla f, bir işlev işaretçisi olarak algılanmaz.

Ve olmamalı, eğer sadece belirsizlik yüzünden

 typedef void (*fn)();

template < typename T>
void g( T Value ) { Print ( typename (Value)); }
void f() {}

void g( fn Value ) { Print ( typename (Value)); }
void OnStart ()
{
  g( f ); // void(*fn)()

   int f = 0 ;  
  g( f ); // int
}
 
fxsaber :

Ve olmamalı, eğer sadece belirsizlik yüzünden

Orjinal örnekte böyle bir belirsizlik yoktu... kendin yarattın... ve onunla her şeyi açıkladın.
 
fxsaber :

Ve olmamalı, eğer sadece belirsizlik yüzünden

Orijinalde typedef, bir tür için bir takma addır ve başka bir tür değil, bu nedenle geliştiriciler için gerçekten büyük soru, tür adının neden türü değil de takma adını gösterdiğidir.
 

Derlerken hata

 struct A {
                 void f() {}
         static    void f( int ) {}
};
template < typename T>
void g( T ) {}
void f( int ) {}
typedef void (*fn)( int );
void OnStart ()
{
        g(  (fn)   f ); //(1) нормально
        g(  (fn)A::f ); //(2) error: '(void(*fn)(int))' - cannot resolve function address
        fn ff = A::f;
        g( ff        ); //(3) нормально
}

(1) normal ise, (3) normal ise (2)'de neden bir hata var???
 
Комбинатор :
Orijinalde typedef, bir tür için bir takma addır ve başka bir tür değil, bu nedenle geliştiriciler için asıl soru, tür adının neden türü değil de takma adını gösterdiğidir.

Kabul ediyorum.

 

A100 :

 template < typename T>
string typeof ( T ) { return typename T; }

Lütfen typeof'u netleştirin. Arama, deneyimli programcılar için olmayan normal bir açıklama bulamadı.

 
Tek bir çalıştırma ve görselleştirme sırasında, günlükler bu türden binlerce girişle doldurulur.
 2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    take profit triggered # 251 sell 1.00 EURUSD 1.18166 tp: 1.18159 [ # 254 buy 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    deal # 251 buy 1.00 EURUSD at 1.18159 done (based on order # 254 )
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    deal performed [ # 251 buy 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order performed buy 1.00 at 1.18159 [ # 254 buy 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order [ # 253 buy limit 1.00 EURUSD at 1.18159 ] triggered

Ve dışarı çıkmaları için uzun saniyeler beklemeniz gerekiyor. Ve günlükte, sadece OnDeinit'te kendim yaptığım dergiye baskı yapmakla ilgileniyorum. ÇOK ender durumlarda okunan bu günlükleri neden her seferinde empoze edelim? Ayrıca, Ajan günlüklerini görüntülemek için Menü'de ayrı bir öğe vardır. Ve bu logların aynı Optimizasyona sahip olmaması kimseyi aşağılık hissettirmez. Öyleyse neden yüzlerce megabaytla bu saplantı (özellikle bazı kötü danışmanlar her tıklamada bir anlaşma açmaya çalışırsa, Desteklenmeyen dolu moduna geçerse)?!

Bir test cihazında sinekleri pirzolalardan ayırmak mümkün müdür? Terminalde olduğu gibi: EA'nın kendisinden çıktılar için bir günlük ve bir terminal günlüğü. Her Sipariş grubu geçişi için günlüklerdeki bu on binlerce gereksiz iletiye kadar uzun saniyeler beklemekten yoruldum ve geriye dönük tamamlamanın son satırlarını görebilirsiniz.

Gerçekten uzun süre acıttı. Belki de beni rahatsız eden sadece ben değilimdir.