[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 1086

 
drknn :


그리고 그게 뭔데?

bool Fun_New_Bar() // 감지 함수 ..
{ // .. 새 막대


정적 날짜 시간 New_Time=0; // 현재 막대의 시간

이것을 정적 변수 초기화 라고 합니다. 이 변수가 초기화될 때만 0이 할당됩니다.
 
khorosh :
이것을 정적 변수 초기화라고 합니다. 이 변수가 초기화될 때만 0이 할당됩니다.


오 어떻게! 시원한. 서브루틴이 호출되고 정적 변수 가 초기화되었습니다. 서브루틴은 변수를 RAM 주소 공간에 삭제하여 종료되었습니다. 그리고 가장 중요한 것은 공간 자체를 고용에서 해방시키지 않으면서 어떻게 될까요?

서브루틴의 정적 초기화는 모든 새 틱마다 다시 발생합니다!!!! 이것은 모든 서브루틴에 대한 모든 변수의 초기화와 관련됩니다. 정적 변수의 범위와 수명은 얼마입니까?

 
drknn :

오 어떻게! 시원한. 서브루틴이 호출되고 정적 변수가 초기화되었습니다. 서브루틴은 변수를 RAM 주소 공간에 삭제하여 종료되었습니다. 그리고 가장 중요한 것은 공간 자체를 고용에서 해방시키지 않으면서 어떻게 될까요?
제대로 작동하는지 쉽게 확인할 수 있습니다. 이것이 왜 이론화되는가? 실천이 진리의 기준입니다. 갑자기 지식의 격차를 발견하면 기쁠 것입니다. 그런 경우에는 항상 만족하고 깨우쳐주신 분께 감사드린다.
 
drknn :


오 어떻게! 시원한. 서브루틴이 호출되고 정적 변수가 초기화되었습니다. 서브루틴은 변수를 RAM 주소 공간에 삭제하여 종료되었습니다. 그리고 가장 중요한 것은 공간 자체를 고용에서 해방시키지 않으면서 어떻게 될까요?

서브루틴의 정적 초기화는 모든 새 틱마다 다시 발생합니다!!!! 이것은 모든 서브루틴에 대한 모든 변수의 초기화와 관련됩니다. 정적 변수의 범위와 수명은 얼마입니까?


예, M1 차트를 확인하십시오! 결국 모든 것이 제대로 작동합니다. 그리고 모든 진드기 가 똑딱거리는 것이 아니라 새로운 진드기가 형성될 때만 가능합니다!

int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
{
Alert("Сформировался новый бар"); // Вывод на экран
}
return(0); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}

 
khorosh :
제대로 작동하는지 쉽게 확인할 수 있습니다. 왜 이러한 이론화? 실천은 진리의 기준입니다. 갑자기 지식의 격차를 발견하면 기쁠 것입니다. 그런 경우에는 항상 만족하고 깨우쳐주신 분께 감사드린다.


동의한다. 흥분했다. 죄송합니다. 정적을 확인 중입니다. 스크립트 작성

 //+------------------------------------------------------------------+
//|                 Старт работы скрипта                             |
//+------------------------------------------------------------------+
int start(){
  int SchVizovov=0;
	for(int i=1;i<5;i++){
		SchVizovov=Proverka(i);
	}
  Alert("-------------------");
	return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+
int Proverka(int Sch){
	
	static int My_value=0; //
	if(My_value==0){
		My_value=Sch;
		Alert("Статическая переменная инициализирована. Proverka() вызвана ",Sch,"-й раз. Статическая переменная = ",My_value);
		return(Sch);
	}
	else{
	 My_value=Sch;
	 Alert("Статическая не реинициализирована. Proverka() вызвана ",Sch,"-й раз. Статическая переменная = ",My_value);
	}
	return(Sch);
}

우리는 컴파일하고 차트에 던집니다. 결과적으로 다음을 얻습니다. http://s2.ipicture.ru/uploads/20101229/k2u2OUqX.jpg

뭐. 아아, 정적이 다시 초기화되지 않는다는 것을 인정해야 합니다. 그러면 코드가 작동합니다. 그 나쁜. :( 언어 도움말은 이러한 뉘앙스를 설명해야 합니다. 도움말은 정적 변수 가 함수를 종료해도 값을 잃지 않는다고 말할 뿐이지만 이 변수가 재초기화 시 다시 초기화되지 않는다고 말하지는 않습니다. 킥, 나는 다시 사실에 부딪쳤습니다. 메타에디터의 도움말이 완전하지 않다는 것 젠장, 잡히지 않을 줄 알았는데 :)))))))

 
drknn :


동의한다. 흥분했다. 죄송합니다. 정적을 확인 중입니다. 스크립트 작성

우리는 컴파일하고 차트에 던집니다. 결과적으로 다음을 얻습니다. http://s2.ipicture.ru/uploads/20101229/k2u2OUqX.jpg

뭐. 아아, 정적이 다시 초기화되지 않는다는 것을 인정해야 합니다. 그러면 코드가 작동합니다. 그 나쁜. :( 언어 도움말은 이러한 뉘앙스를 설명해야 합니다. 도움말에는 함수를 종료해도 정적 변수의 값이 손실되지 않는다는 내용만 나와 있습니다. 그러나 이 변수를 다시 초기화할 때 이 변수가 다시 초기화되지 않는다는 내용은 아닙니다. 젠장, 또 걸렸네요. 젠장. , 더 이상 넘어지지 않을 거라 생각했어요 :)))))))

가장 중요한 것은 화를 내지 않는 것입니다. 우리는 모두 여기서 배우고 있습니다. 어떤 뉘앙스가주의를 벗어나고 이미 모든 것을 알고있는 것처럼 보였을 때 그것에 대해 배웁니다.

도움말 에는 정적 변수의 초기화가 한 번만 수행된다고 나와 있습니다. 그러한 재초기화는 존재하지 않습니다.

 
khorosh :
가장 중요한 것은 화를 내지 않는 것입니다. 우리는 모두 여기서 배우고 있습니다. 어떤 뉘앙스가주의를 벗어나고 이미 모든 것을 알고있는 것처럼 보였을 때 그것에 대해 배웁니다.


나는 지식의 격차가 발견되었다고 화를 내지 않는다 - 나는 내 코드에서 잼을 식별할 때 화를 내고, 1시간 이상 검색을 했을 때 지쳤고, 이것이 나의 캔트가 아님이 밝혀졌다. 그러나 도움말 시스템의 캔트 또는 터미널의 캔트. 그런 잼과 관련된 오류를 식별하기 위해 지난 6년 동안 프로그래밍에 소비한 시간을 요약하면 내 인생의 상당히 많은 부분이 단순히 쓰레기통에 버려졌다고 말할 수 있습니다. 이것이 좌절스러운 것입니다. 인생의 시간은 쓰레기로 날아갑니다. 날아가서 돌아오지 않습니다. 글쎄, 현재 상황은 나를 화나게하지 않았다. 반대로 나는 기뻤다. 나는 오류를 찾기 위해 밤낮으로 밤낮을 보낼 필요가 없었습니다. 그것은 빨리 밝혀졌습니다.

Nikolai, 다시 한 번 사과드립니다. 6년 동안 저는 이 함수가 다시 호출될 때 함수 내부에 값으로 선언된 변수가 다시 초기화된다고 생각했습니다. (터미널의 전역 수준 변수에 대해서는 침묵합니다. 그건 또 다른 이야기입니다.) 규칙에 예외가 있음이 밝혀졌습니다. 오늘 배운 교훈은 바로 왕실!

 
khorosh :

도움말에는 정적 변수의 초기화가 한 번만 수행된다고 나와 있습니다. 그러한 재초기화는 존재하지 않습니다.

인용 참조:

정적 변수는 특수화된 init() 함수를 호출하기 전에 한 번 초기화되며,

그리고 정적 변수를 어디에서 초기화했습니까? 서브루틴에서. 초기화 규칙 위반 - 위반.

init() 함수가 호출되기 전에는 정적 변수가 선언되거나 서브루틴에서 호출되지 않았습니다. 여기서 혼란이 옵니다. init() 블록 이전 에 정적 변수의 초기화 가 없었기 때문에 일회성 규칙은 프로그램 구조의 특정 섹션에 묶여 있기 때문에 힘을 잃습니다. 그것이 참조에 대한 것입니다. 그러나 감염은 말한 대로 되지 않습니다. 일회성 규칙이 효력을 상실했음에도 불구하고 여전히 재초기화는 발생하지 않습니다!

사실은 독신의 규칙이 경직성을 부과한다는 것입니다. 여기에서 판단의 주어와 술어 사이에 동일한 양의 연결이 효력을 발생합니다. 따라서 이것은 동등합니다. 다른 하나가 없는 것은 존재하지 않습니다.

그러나 다시 말하지만, 언어는 또 다른 방식으로 하나됨의 규칙을 깨도록 허용합니다. 이 변수가 원래대로 선언되고 초기화 블록 이전에만 값을 사용한 초기화가 가능한 경우 이 변수는 일회성 규칙을 위반하므로 코드의 다른 곳에서 초기화할 수 없습니다. 그러나 내가 만든 스크립트는 이것이 사실이 아님을 보여줍니다. 변수는 도중에 다른 값으로 초기화될 수 있습니다.

나는 내 코드에서 이러한 변수를 사용한 적이 없으며 이러한 규칙 위반이 있기 때문에 사용하지 않을 것입니다. 그들과 함께 숨겨진 다른 "함정"이 무엇인지는 알려져 있지 않습니다.

 

문제가 있습니다 ....

터미널 설정 에서 메일을 설정할 때 SMTP에서 - smtp.gmail.com:25를 사용합니다.

오류가 발생합니다. - 메일: 530 5.7.0 먼저 STARTTLS 명령을 실행해야 합니다. l3sm2329679fan.0
 
drknn :

인용 참조:

그리고 정적 변수를 어디에서 초기화했습니까? 서브루틴에서. 초기화 규칙 위반 - 위반.

init() 함수가 호출되기 전에는 정적 변수가 선언되거나 서브루틴에서 호출되지 않았습니다. 여기서 혼란이 옵니다. 초기화 블록 이전에 정적 변수의 초기화가 없었기 때문에 일회성 규칙은 프로그램 구조의 특정 섹션에 묶여 있기 때문에 힘을 잃습니다. 그것이 참조에 대한 것입니다. 그러나 감염은 말한 대로 되지 않습니다. 일회성 규칙이 효력을 상실했음에도 불구하고 여전히 재초기화는 발생하지 않습니다!

튜토리얼에서 정적 변수 를 사용하는 예도 있는데, 한 번 초기화되지 않으면 틱 카운터가 작동하지 않는다는 것이 분명합니다.

 //--------------------------------------------------------------------
// staticvar.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                             // Специальная функция start()
  {
   static int Tick;                     // Статическая локальная перем
   Tick++;                             // Счётчик тиков
   Comment ( "Поступил тик № " ,Tick);     // Сообщение, содержащее номер
   return ;                             // Оператор выхода из start()
  }
//--------------------------------------------------------------------