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

}

.