오류, 버그, 질문 - 페이지 2044

 
Alexey Navoykov :

정적 변수 초기화 버그. 오래된 건물에는 없었습니다.

누구에게나 어렵지 않으니 서비스 데스크로 보내주세요. 나는 더 이상 그곳에서 그들과 어울리고 싶지 않습니다.

이것은 여기에서 논의된 버그가 아닙니다. 찌르다

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql4 언어의 특징, 미묘함 및 작업 방법

알렉세이 빅토 로프 , 2017.04.30 08:54

초기화 순서: (모르는 사람들을 위해)

먼저 전역 수준 변수, OnInit(), OnTick() 또는 OnCalculate() 함수의 우선 순위에 따라 위치하는 정적 변수 ... 그런 다음 관심이 없었지만 한 번에 로컬 변수였습니다. 따라서 이 코드에서 함수는 정적 변수 초기화가 끝나기 전에 호출되므로 문제의 오류가 발생합니다. 변수가 초기화되기 전에 호출되는 함수

 
fxsaber :

이것은 여기에서 논의된 버그가 아닙니다. 찌르다

따라서 이것이 당신과 Alexey Viktorov 사이에 논의되었다면 이것이 버그가 아니라고 믿을 이유가 있습니까? ) 게다가, 이 사람은 자신의 프로그래밍 지식 수준이 당신보다 훨씬 낮다고 선언합니다. 저것들. 목록에서 벗어날 수 있습니다. 너만 남음) 자신과 의논한 것이므로 버그가 아니다)

이것은 버그입니다. 원칙적으로 변수의 초기화를 무시하고 코드가 계속 실행되어 이를 뛰어넘는 것은 불가능합니다. 말도 안되는 소리입니다. 그리고 여기서 초기화 순서는 중요하지 않습니다. 변수가 초기화되거나 컴파일러가 해당 위치에서 오류를 발생시킵니다. 세 번째는 없습니다. 그렇지 않으면 프로그래밍 언어가 아니라 도대체 무엇입니까.

 

새 빌드의 또 다른 버그:

 template < typename T>
int F1( const T& array[])
{
   return ArrayMaximum (array);
}


template < typename T>
int F2( const T& array[]) { return F1(array); }


void OnStart ()
  {
     int arr[ 4 ]= { 1 , 2 , 3 };
     Print (F2(arr));   // Выдаёт -1 !!!
  }


아, 여기 얼마나 습한지. 나는 새 빌드로 업그레이드할 것이라고 생각했습니다. 그렇지 않으면 시장에서 이전 빌드의 제품을 허용하지 않습니다. 그리고 여기 버그에 대한 버그가 있습니다!

 
Alexey Navoykov :

따라서 이것이 당신과 Alexey Viktorov 사이에 논의되었다면 이것이 버그가 아니라고 믿을 이유가 있습니까? ) 게다가, 이 사람은 자신의 프로그래밍 지식 수준이 당신보다 훨씬 낮다고 선언합니다. 저것들. 목록에서 벗어날 수 있습니다. 너만 남음) 자신과 의논한 것이므로 버그가 아니다)

이것은 버그입니다. 원칙적으로 변수의 초기화를 무시하고 코드가 계속 실행되어 이를 뛰어넘는 것은 불가능합니다. 말도 안되는 소리입니다. 그리고 여기서 초기화 순서는 중요하지 않습니다. 변수가 초기화되거나 컴파일러가 해당 위치에서 오류를 발생시킵니다. 세 번째는 없습니다. 그렇지 않으면 프로그래밍 언어가 아니라 도대체 무엇입니까.

당신은 그것을 지울 수 있습니다, 나는 결코 "나는 어떤 종류의 프로그래머인가"라는 손가락을 펼치지 않습니다 ...

그리고 엄마는 문서를 읽으라고 명령하지 않습니다 ??? 특히 그러한 경우 문서에서 인용문을 삽입했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql4 언어의 기능, 미묘함 및 작업 방법

알렉세이 빅토 로프 , 2017.04.29 12:50

그리고 정적 변수가 ... 스스로 읽는 도움말에 쓰여진 것은 없습니다.

정적 변수는 모든 표현식으로 초기화할 수 있는 단순 지역 변수와 달리 해당 유형에 해당하는 상수 또는 상수 표현식 으로 초기화할 수 있습니다.


그러나 기능은 아닙니다.

이것이 작동하는 방식입니다

 #property strict
#property indicator_chart_window

int TestBrokenStatic()
{
   static int stInt = 101 ;
   stInt++;
   return stInt;
}

int OnInit ()
{
   static int result = 0 ;
   result = TestBrokenStatic();
   Print ( "TestStatic Expected result 102   - Actual result=" , result);
   result = TestBrokenStatic();
   Print ( "TestStatic Expected result 103   - Actual result=" , result);
   
   return INIT_SUCCEEDED ;
}

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   return rates_total;
}
2017.04 . 29 13 : 49 : 51.546 !Test USDCHF,M15: TestStatic Expected result 103    - Actual result= 103
2017.04 . 29 13 : 49 : 48.457 !Test USDCHF,M15: TestStatic Expected result 102    - Actual result= 102
2017.04 . 29 13 : 49 : 40.089 Custom indicator Test\!Test USDCHF,M15: loaded successfully

 
Alexey Navoykov :

새 빌드의 또 다른 버그:

아, 여기 얼마나 습한지. 나는 새 빌드로 업그레이드할 것이라고 생각했습니다. 그렇지 않으면 시장에서 이전 빌드의 제품을 허용하지 않습니다. 그리고 여기 버그에 대한 버그가 있습니다!

그리고 그것은 나를 올바르게 보여줍니다!

 
Alexey Viktorov :

당신은 그것을 지울 수 있습니다, 나는 결코 "나는 어떤 종류의 프로그래머인가"라는 손가락을 펼치지 않습니다 ...

그리고 엄마는 문서를 읽으라고 명령하지 않습니다 ??? 특히 그러한 경우 문서에서 인용문을 삽입했습니다.

네, 죄송합니다. 바로 눈치채지 못했습니다. 물론 그들이 어떻게 교활하게 그것을 변경하고 아무에게도 말하지 않은 것은 놀랍습니다. 그러면 컴파일러가 잘못된 연산이 수행되고 있다는 사실에 대해 어떤 식으로든 반응하지 않는 이유가 명확하지 않습니다. 저것들. 어쨌든 버그가있다
 
fxsaber :

그리고 그것은 나를 올바르게 보여줍니다!


흠, 당신의 빌드는 무엇입니까? 1653이 있어요

 
Alexey Navoykov :

따라서 이것이 당신과 Alexey Viktorov 사이에 논의되었다면 이것이 버그가 아니라고 믿을 이유가 있습니까? ) 게다가, 이 사람은 자신의 프로그래밍 지식 수준이 당신보다 훨씬 낮다고 선언합니다. 저것들. 목록에서 벗어날 수 있습니다. 너만 남음) 자신과 의논한 것이므로 버그가 아니다)

이것은 버그입니다. 원칙적으로 변수의 초기화를 무시하고 코드가 계속 실행되어 이를 뛰어넘는 것은 불가능합니다. 말도 안되는 소리입니다. 그리고 여기서 초기화 순서는 중요하지 않습니다. 변수가 초기화되거나 컴파일러가 해당 위치에서 오류를 발생시킵니다. 세 번째는 없습니다. 그렇지 않으면 프로그래밍 언어가 아니라 도대체 무엇입니까.

결과에 대한 논리적(일관된) 설명을 찾으면 버그가 표시되지 않습니다. 결과가 C++와 일치하지 않으면 버그 증거가 허용되지 않는다고 생각합니다. 누군가 그렇게 생각하고 실행한 C++입니다. 그리고 그는 그렇게 생각하지 않을 수도 있고 따라서 그렇게 하지 않을 수도 있습니다. 그러므로 거기에 있는 어떤 것을 지칭하는 것이 아니라 어떤 종류의 내부 개념을 기반으로 하는 것이 바람직합니다. 그리고 "자신의 것"은 실제로 자신의 것이 되는 것이 바람직합니다. 프로그래밍 경험을 쌓으면서 인식할 수 없는 고정관념을 "있는 그대로" 강요한 결과가 아닙니다.

나는 틀리는 것을 개의치 않았다. 천천히 혼자 배워가는 중입니다.

 
Alexey Navoykov :

흠, 당신의 빌드는 무엇입니까? 나는 1653을 가지고있다

1653x64.

 
fxsaber :

1653x64.

그 불일치가 어디에서 오는지 이상합니다 ...


다른 사람이 직접 확인하도록 하세요.

사유: