mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 216

 
Igor Makanu # :

추신: 다음 형식의 매크로도 보았습니다.

이해하지 못했습니다.

 
fxsaber # :

이해하지 못했습니다.

그런 매크로, 구글 "macro while 0"의 편리성에 대해 인터넷에 많은 정보가 있습니다.

https://russianblogs.com/article/9410298326/

 

이 스레드에는 이미 오래전에 while(0)의 예가 있었습니다.

https://www.mql5.com/ru/forum/170952/page141#comment_12897922

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2019.07.30
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
mktr8591 # :
만일의 경우를 대비하여 명확히 하겠습니다. 이것은 정적에만 해당됩니다(모두 C ++에 관한 것입니다). 지역 변수의 경우 사용자 정의 토러스가 있으면 nulling이 없습니다.

어떤 식으로든 OOP와 모순되지 않는 설명 자체가 마음에 들었습니다.

단순 구조 객체를 생성하면 다음이 발생합니다.

  1. 메모리가 구조에 할당되었습니다. 쓰레기가 있습니다.
  2. 생성자는 이 조각에서 시작됩니다.

{}를 통한 선언이 있는 경우 단락 1-2 사이에 또 다른 선언이 삽입되어 할당된 메모리를 0으로 채웁니다.


이 논리로 OOP는 어떤 식으로든 고통을 겪지 않습니다. 유효한 메커니즘.

 
fxsaber # :

    {}를 통한 선언이 있는 경우 단락 1-2 사이에 또 다른 선언이 삽입되어 할당된 메모리를 0으로 채웁니다.

    이 논리로 OOP는 어떤 식으로든 고통을 겪지 않습니다. 유효한 메커니즘.

    논리 자체는 여기서 문제가 됩니다. 생성자가 어쨌든 0으로 재설정된다면 왜 0으로 재설정합니까?

     
    A100 # :

    논리 자체는 여기서 문제가 됩니다. 생성자가 어쨌든 0으로 재설정된다면 왜 0으로 재설정합니까?

    생성자가 있는 구조체는 공용체에서 사용할 수 없기 때문입니다.

     
    Ilyas # :

    Union 의 경우 첫 번째 멤버만 초기화 하고 필드를 바꾸면 테스트가 통과합니다.
    대부분의 사용자가 기대하는 대로 동작하도록 속도를 희생하면서 동작을 변경할 가치가 있는지 생각해 봅시다.

    변경된 사항을 고려하십시오. 이제 첫 번째 구성원이 0 x[i].i == 0과 같은지 확인합니다(이전 조건은 x[i].x == 0.0).

     union X {
         int i ;
         double x;
    };
    void OnStart ()
    {
        X x[ 10000 ] = {}; //(*)
         bool b = true ;
         for ( int i = 0 ; i < ArraySize (x) && (b = ( x[i].i == 0 )); i++ );
         Print ( b );
    }

    결과: 거짓

    그리고 ZeroMemory와 함께 - 사실

     
    Igor Makanu # :

    그런 매크로, 구글 "macro while 0"의 편리성에 대해 인터넷에 많은 정보가 있습니다.

    https://russianblogs.com/article/9410298326/

    모든 소란은 매크로 끝에 세미콜론을 넣는 것입니다. 매크로 곳곳에 중괄호를 사용하는데 문제가 있는지 모르겠습니다.

     
    A100 # :

    변경된 사항을 고려하십시오. 이제 첫 번째 구성원이 0 x[i].i == 0과 같은지 확인합니다(이전 조건은 x[i].x == 0.0).

    결과: 거짓

    그리고 ZeroMemory와 함께 - 사실

    네. mql 버그

    (그리고 C++에서는 true를 반환합니다).

     
    복잡한 구조를 무효화하려면 이제(b3110) 어떻게 해야 합니까?
     struct MqlTick2 : private MqlTick
    {
    //  string Str; // С этой строкой не обнулить.
    };
    
    
    template < typename T>
    void ZeroMemoryStruct( T &Struct )
    {
       uchar Bytes[ sizeof (T)];
      
      :: CharArrayToStruct (Struct, Bytes);
    }
    
    void OnStart ()
    {
      MqlTick2 Tick;
    
      ZeroMemoryStruct(Tick);  
    }
    사유: