Değişkenleri bir döngünün arkasında mı yoksa bir döngünün içinde mi bildiriyorsunuz? - sayfa 7

 
Alexey Volchanskiy :

Derleyicinin yerel değişkenleri küresel değişkenler gibi sıfıra ayarladığını düşünen bir grup insanla tanıştım.

Derleyici uyarı vermez.

verir, string ve print değişkenlerle çalışmanın bir göstergesi değildir

 int a;
int b;

void OnStart ()
  {
   b=a+ 100 ;
   int c;
   int d=c+ 5 ;
   for ( int i= 0 ;i< 10 ;i++)
     {
       int e;
       int f=i+e;
     }
  }

'tst.mq5' tst.mq5 1 1

başlatılmamış değişken 'c' olası kullanımı tst.mq5 on altı on

başlatılmamış değişken 'e' olası kullanımı tst.mq5 20 17

oluşturulan kod 1 1

0 hata(lar), 2 uyarı(lar), 526 msn geçti 1 3

 
//c++
int main() {
         int count= ( int ) 10 e6;
        {
                auto t1 = chrono::high_resolution_clock::now();
                 int sum= 0 ;
                 for ( int i= 0 ; i<count; i++) {
                         string st;
                        st = "12345678qwertyuioasdfgh" ;
                        sum += st[i% 23 ];
                }
                auto t2 = chrono::high_resolution_clock::now();
                auto duration = chrono::duration_cast<chrono::milliseconds>( t2 - t1 ).count();
                cout << "time = " << duration << endl;
                cout << "sum = " << sum << endl;
        }

  
        {
                auto t1 = chrono::high_resolution_clock::now();
                 int sum= 0 ;
                 string st = "" ;
                 for ( int i= 0 ; i<count; i++) {
                        st = "12345678qwertyuioasdfgh" ;
                        sum += st[i% 23 ];
                }
                auto t2 = chrono::high_resolution_clock::now();
                auto duration = chrono::duration_cast<chrono::milliseconds>( t2 - t1 ).count();
                cout << "time = " << duration << endl;
                cout << "sum = " << sum << endl;
        }
}

zaman = 1018
toplam = 894782460
zaman=371
toplam = 894782460

Hz. neden, ama µl çok ileride (ve Rand() ile daha şık seçenekler).

Ve benim için açık - bir döngü için dışarı çıkmak.

 
Alexey Volchanskiy :

Derleyicinin yerel değişkenleri küresel değişkenler gibi sıfıra ayarladığını düşünen bir grup insanla tanıştım.

Derleyici uyarı vermez.

Ya da .... Şey, bilmiyorum. her fırsatta yemin ederim...))))))

 
Сергей Таболин :

Ya da .... Şey, bilmiyorum. her fırsatta yemin ederim...))))))

Derleyicinin müstehcen bir versiyonuna sahipsiniz)
 
Vict :

zaman = 1018
toplam = 894782460
zaman=371
toplam = 894782460

Hz. neden, ama µl çok ileride (ve Rand() ile daha şık seçenekler).

Ve benim için açık - bir döngü için dışarı çıkmak.

Ben bir guru değilim, ama burada, benim düşünceme göre, bir döngüdeki değişkenleri bildirmek aslında XZ'dir (ve bu artık Kim Bilir değil) !!!

Bu bir şey - bir işlev, hatta yerel bir kod parçası, ancak döngüler ....

belki ben haklı değilim

 
Dmitriy Skub :
Derleyicinin müstehcen bir versiyonuna sahipsiniz)

Ve buna sevindim)))))))))) Her ne kadar bazen .... sessiz olsaydı daha iyi olurdu)))))))))))))))))) ))))))))))))))

 

Eğer böyle bir tartışma gittiyse, Guru'ya sormak istiyorum.

"Daha doğru" nedir (daha optimal ve daha okunabilir):

 for ( int i= 0 ;i< Bars ();i++)
{
// code
}

Veya

 int i,MaxBars= Bars() - 1 ;
for (i=MaxBars;i>= 0 ;i--;)
{
// code
}

i'nin sırası kayıtsızsa?

 
Сергей Таболин :

Ben bir guru değilim, ama burada, benim düşünceme göre, bir döngüdeki değişkenleri bildirmek aslında XZ'dir (ve bu artık Kim Bilir değil) !!!

Bu bir şey - bir işlev, hatta yerel bir kod parçası, ancak döngüler ....

belki ben haklı değilim

Mümkün değil ama kesinlikle yanlış. Sadece bir örnek: Açık pozisyonlar arasında geçiş yapıyorsunuz. Bir pozisyon bileti alırsınız, diğer pozisyon özelliklerini almak için kullanın. İki seçenek vardır, ya position özelliğini almak için her bir işleve PositionGetTicket(i) ekleyin ya da bir kez bir değişkene yazıp kullanın. Ama sonuçta, döngüden çıktığınızda, bu bilete artık kimse ihtiyaç duymuyor ... neden bu değişkeni OnTick () işlevinin gövdesinde veya küresel düzeyde daha da ilginç olarak ilan edelim?
 
Mikhail Dovbakh :

Eğer böyle bir tartışma gittiyse, Guru'ya sormak istiyorum.

"Daha doğru" nedir (daha uygun ve daha okunabilir):

Veya

i'nin sırası kayıtsızsa?

Bence ilk seçenek, fazladan değişken olmadığından, yalnızca bellek kullanmakla kalmazlar, benim için kodu karıştırırlar - daha fazlasını okuyun, ancak işlevler nadiren kullanılıyorsa, bazen IMHO adlı işlevlere bağlıdır. gerçekleştirilen görevin anlamına göre bir adla bir değişken bildirirseniz daha okunaklı olacaktır .... genel olarak, bu yaratıcı bir görevdir)))

ama genel olarak kimseyi dinleyecek bir şey yok, ne kadar rahat yazıyoruz - yani, rahatlığımız için dilin olanaklarını kullanın

Not: Microsoft'tan örneklere baktım, stil temelde değişkenleri kullanırken hemen bildirimler, temel olarak yerel bir kapsam elde edilir, ancak fanatizm olmadan))

 void SimpleImage::CalculateDrawingRect()
{
     // Load our bitmap if necessary
     if (nullptr == m_bitmap)
    {
         if (FAILED(LoadBitmapFromShellItem()))
        {
             return ;
        }
    }

     // Calculate bitmap rectangle
     float boundingWidth = m_boundingRect.right - m_boundingRect.left;
     float b oundingHeight = m_boundingRect.bottom - m_boundingRect.top;

     float w idth = Direct2DUtility::GetRectWidth(m_clipRect);
     float h eight = Direct2DUtility::GetRectHeight(m_clipRect);

     if (!m_isHorizontal)
    {
         // Swap width and height to calculate boundaries
         float widthTemp = width;
        width = height;
        height = widthTemp;
    }

     if (width > boundingWidth)
    {
         // Width is larger than bounding box. Scale width to fit
         float scale = boundingWidth / width;
        width *= scale;
        height *= scale;
    }
https://github.com/microsoft
Microsoft
Microsoft
  • github.com
This repo is the official home of .NET on GitHub. It's a great starting point to find many .NET OSS projects from Microsoft and the community, including many that are part of the .NET Foundation.
 
Mikhail Dovbakh :

Eğer böyle bir tartışma gittiyse, Guru'ya sormak istiyorum.

"Daha doğru" nedir (daha optimal ve daha okunabilir):

Veya

i'nin sırası kayıtsızsa?

kayıtsız ise

int i = Bars();

while(i-- > 0) 

{

// code

}

.