MetaTrader 4 Build 529 베타가 새로운 컴파일러와 함께 출시됨 - 페이지 17

 
Barbarian :

모든 것이 이전에 작동했습니까? i 변수를 선언한 위치를 알 수 없습니다.


전역 변수 에서 i를 한 번 초기화하고 모든 루프에서 사용하면 더 편리하고 쉽습니다.
 
ALXIMIKS :

따라서 이미 실행되고 작동 하는 표시기의 매개변수를 변경할이를 두 번 클릭하여 ,

정적 변수의 업데이트가 없습니다 . 나쁜 표시기라는 관점에서 볼 때 다시 그려지지 않습니다 ???


정적 변수 는 프로그램이 다시 초기화될 때 값을 유지합니다. 값은 차트에서 프로그램을 제거하고 다시 첨부할 때만 저장되지 않습니다. 재초기화 시 정적 변수를 재설정하려면 다음 구성을 사용합니다.

 bool g_init;

void OnInit ()
{
   g_init = true ;
}

void MyFunction()
{
   static int myStatic;
   if (g_init)
   {
      myStatic = 0 ;
      g_init = false ;
   }
}
 
VOLDEMAR :
이렇게 작동합니다...

이대로 작동하지 않습니다


두 번째 경우, 함수에서 선언된 배열의 범위는 함수입니다.

코드에서

 for (i=Coment- 1 ; i>= 1 ; i--){info[i]=info[i- 1 ]; cv  [i]=cv  [i- 1 ];}info[ 0 ]=txt;cv[ 0 ]=et;


txt 및 et 값으로 모든 배열 요소 를 초기화하고 있습니까? 아마도 마지막 2개의 할당은 루프 앞에 와야 하고 루프는 다르게 구성되어야 합니다. 아니면 이것이 아이디어입니까?

 
Scriptong :


정적 변수는 프로그램이 다시 초기화될 때 값을 유지합니다. 값은 차트에서 프로그램을 제거하고 다시 첨부할 때만 저장되지 않습니다. 재초기화 시 정적 변수를 재설정하려면 다음 구성을 사용합니다.


이제 도서관을 돌아다니며 모든 것을 다시 작성하려면 어떻게 해야 할까요? 509에서는 모든 것이 괜찮 았지만 여기에서는 ......
 
alexvd :


두 번째 경우, 함수에서 선언된 배열의 범위는 함수입니다.

코드에서


txt 및 et 값으로 모든 배열 요소를 초기화하고 있습니까? 아마도 마지막 2개의 할당이 루프 앞에 와야 합니다. 아니면 이것이 아이디어입니까?


먼저 텍스트가 루프에서 한 수준 이동한 다음 새 텍스트가 0 값에 할당됩니다...

이 배열은 위에서 제시한 함수에서만 사용됩니다 ...

이전에는 509 및 이전 빌드에서 모든 것이 두 경우 모두에서 작동했습니다. 이제 첫 번째 빌드에서만 ...

 
ALXIMIKS :

이제 도서관을 돌아다니며 모든 것을 다시 작성하려면 어떻게 해야 할까요? 509에서는 모든 것이 괜찮 았지만 여기에서는 ......


코드의 맨 처음에 코드에서 사용하도록 계획된 모든 변수를 초기화하는 것이 좋습니다.

이것은 작업을 단순화하고 프로그램 시작 및 추가 사용에서 변수를보고 올바르게 재설정 할 수있게합니다 ...

 
ALXIMIKS :

따라서 이미 실행되고 작동 하는 표시기의 매개변수를 변경할이를 두 번 클릭하여 ,

정적 변수의 업데이트가 없습니다 . 나쁜 표시기라는 관점에서 볼 때 다시 그려지지 않습니다 ???

내가 기억하는 한 이것은 항상 그랬습니다(확실한 빌드 509에서). 이것은 기능입니다.

볼데마르 :

XP가 설치된 컴퓨터와 W 7이 설치된 컴퓨터에서 이상한 점을 발견했습니다.

함수 내에서 배열을 초기화할 때 배열 전체가 채워지지 않고 0 값만 ...

모든 함수 외부의 전역 수준에서 배열을 초기화할 때 배열은 원래대로 완전히 채워집니다...

이것은 또한 수천 번 이야기했습니다. 배열과 변수를 명시적으로 초기화 하고 "하늘의 축복"을 기다리지 마십시오.

지역 광고의 경우, 당신은 단지 운이 좋고 쓰레기가 들어가지 않습니다. 그러나 나는 그것에 의존하지 않을 것입니다.

 
새 컴파일러와 새 런타임은 코드 품질을 훨씬 더 엄격하게 제어합니다. 많은 MQL4 코드가 타사 개발자에 의해 부주의하게 작성되었으며 이제 이러한 결함이 즉시 표시됩니다.
 

내가 잘못 이해했다면 정정하십시오.

표시기에서 라이브러리 함수를 사용합니다. 이 함수에서는 표시기 배열 계산과 관련된 일부 정적 변수가 선언됩니다.

지표 매개변수를 변경하려는 경우 지표가 올바르게 계산되도록 하려면(정적 변수에 대한 의존성을 고려하여),

라이브러리 함수에 재초기화를 담당하는 플래그를 전달해야 합니다(정적 변수가 있는 각 함수의 입력 매개변수를 확장해야 함).

본문에서 정적 변수의 값을 재설정하고 전체 계산을 완료하기 전에 플래그를 제거하는 것을 잊지 마십시오.

정적 변수가 선언될 때 일부 매개변수가 설정되어 있으면 훨씬 더 쉬울 것입니다. 이 매개변수는 재초기화 중에 이러한 변수의 값이 재설정되는지 여부를 담당합니다.

 
Renat :
새 컴파일러와 새 런타임은 코드 품질을 훨씬 더 엄격하게 제어합니다. 많은 MQL4 코드가 타사 개발자에 의해 부주의하게 작성되었으며 이제 이러한 결함이 즉시 표시됩니다.
편집기에 있는 MQL4 참조도 그에 따라 업데이트되었습니까?