루프 뒤 또는 루프 내부에서 변수를 선언하시겠습니까? - 페이지 7

 
Alexey Volchanskiy :

컴파일러가 전역 변수와 마찬가지로 지역 변수를 0으로 설정 한다고 생각하는 많은 사람들을 방금 만났습니다.

컴파일러는 경고를 발행하지 않습니다.

출력, 문자열 및 인쇄는 변수 작업의 지표가 아닙니다.

 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 하나 하나

초기화되지 않은 변수 'c' 사용 가능 tst.mq5 열여섯

초기화되지 않은 변수 ''의 사용 가능 tst.mq5 20 17

생성된 코드 하나 하나

오류 0개, 경고 2개, 526밀리초 경과 하나

 
//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;
        }
}

시간 = 1018
합계 = 894782460
시간=371
합계 = 894782460

헤이즈 하지만 µl은 훨씬 앞서 있습니다(그리고 rand()를 사용하는 더 멋진 옵션).

그리고 나를 위해 그것은 명백합니다 - 사이클을 위해 꺼내는 것입니다.

 
Alexey Volchanskiy :

컴파일러가 전역 변수와 마찬가지로 지역 변수를 0으로 설정 한다고 생각하는 많은 사람들을 방금 만났습니다.

컴파일러는 경고를 발행하지 않습니다.

또는 .... 글쎄, 나는 모른다. 나는 모든 기회에 맹세합니다....)))))))

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

또는 .... 글쎄, 나는 모른다. 나는 모든 기회에 맹세합니다....)))))))

음란한 버전의 컴파일러가 있습니다)
 
Vict :

시간 = 1018
합계 = 894782460
시간=371
합계 = 894782460

헤이즈 하지만 µl은 훨씬 앞서 있습니다(그리고 rand()를 사용하는 더 멋진 옵션).

그리고 저에게는 사이클을 견디는 것이 분명합니다.

저는 전문가는 아니지만 여기에서 제 겸손한 의견으로는 사이클에서변수를 선언 하는 것은 실제로 XZ입니다(이것은 더 이상 누가 압니까?) !!!

그것은 한 가지입니다 - 함수, 심지어 로컬 코드 조각이지만 루프 ....

아마도 내가 옳지 않다.

 
Dmitriy Skub :
음란한 버전의 컴파일러가 있습니다)

그리고 나는 그것에 대해 기쁩니다))))))))))) 가끔 .... 그가 침묵하는 것이 더 좋을 것입니다)))))))))))))))))) )))))))))))))))

 

그런 논쟁이 사라진다면 나는 구루에게 묻고 싶다.

"더 정확한"(더 최적이고 더 읽기 쉬운):

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

또는

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

i의 순서가 무관심하다면?

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

저는 전문가는 아니지만 여기에서 제 겸손한 의견으로는 사이클에서 변수를 선언 하는 것은 실제로 XZ입니다(이것은 더 이상 누가 압니까?) !!!

그것은 한 가지입니다 - 함수, 심지어 로컬 코드 조각이지만 루프 ....

어쩌면 내가 옳지 않다

불가능하지만 확실히 틀렸습니다. 한 가지 예: 열려 있는 위치를 순환합니다. 직위 티켓을 받고 다른 직위 속성을 얻는 데 사용하십시오. 위치 속성을 가져오기 위해 각 함수에 PositionGetTicket(i)을 삽입하거나 변수에 한 번 쓰고 사용하는 두 가지 옵션이 있습니다. 그러나 결국 루프를 종료하면 이 티켓은 더 이상 누구에게도 필요하지 않습니다. 이 변수를 OnTick() 함수의 본문에 선언하거나 전역 수준에서 더 흥미로운 이유는 무엇입니까?
 
Mikhail Dovbakh :

그런 논쟁이 사라진다면 나는 구루에게 묻고 싶다.

"더 정확한"(더 최적이고 더 읽기 쉬운):

또는

i의 순서가 무관심하다면?

첫 번째 옵션은 추가 변수가 없기 때문에 메모리를 사용할 뿐만 아니라 저에게는 코드가 어수선하다고 생각합니다. 더 읽어보기는 하지만 함수가 거의 사용되지 않는 경우 IMHO라는 함수에 따라 달라지며 때로는 수행하는 작업의 의미에 따라 이름으로 변수를 선언하면 더 읽기 쉽습니다.... 일반적으로 이것은 창의적인 작업입니다)))

그러나 일반적으로 우리가 얼마나 편리하게 쓰는지, 즉 누구의 말을들을 수있는 것이 없습니다. 우리의 편의를 위해 언어의 가능성을 사용

추신: 나는 Microsoft의 예제를 보았고, 스타일은 기본적으로 변수를 사용할 때 즉시 선언합니다. 기본적으로 로컬 범위를 얻지만 광신은 없습니다))

 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 :

그런 논쟁이 사라진다면 나는 구루에게 묻고 싶다.

"더 정확한"(더 최적이고 더 읽기 쉬운):

또는

i의 순서가 무관심하다면?

무관심하면

int i = Bars();

while(i-- > 0) 

{

// code

}

.